我在 Ubuntu 12.10 中遇到了休眠问题,它在 12.04 中运行良好。当我尝试休眠时,它有时会抛出错误并返回到桌面。我得到的错误是:
PM: Creating hibernation image:
PM: Need to copy 375021 pages
PM: Normal pages needed: 117957 + 1024, available pages: 110205
PM: Not enough free memory
PM: Error -12 creating hibernation image
现在我明白了错误的含义,但它没有任何意义。我的交换文件是 5GB,而且很少使用,因为我有 4GB 的 RAM。我知道建议交换文件比 RAM 多 1.5 倍,但尽管有错误,空间似乎不是问题。
例如,我很少使用超过 25%-30% 的 RAM,但仍然存在上述问题。
此外,在全新启动和登录时,没有打开任何程序并且仅使用大约 12% 的 RAM,我会出现上述错误 - 但在其他时候我可以休眠同时使用 25% 的 RAM。
此外,如果我继续尝试休眠,在出现上述错误四五次后,它最终会休眠。成功的休眠如下所示:
PM: Creating hibernation image:
PM: Need to copy 295511 pages
PM: Normal pages needed: 95534 + 1024, available pages: 132627
我需要调整某些设置或在休眠之前做些什么来避免这个问题吗?
我想这个问题可以更好地解释为:是否有某种方法可以在休眠前安全地刷新缓冲区和缓存?除了尝试休眠几次直到成功!
提前致谢。
答案1
我相信我已经找到了部分解决方案在这里如果我输入命令:
sudo sync && sudo sysctl -w vm.drop_caches=3
在尝试休眠之前,我不再遇到问题,每次都会第一次休眠。这似乎清空了缓存,因此留下了足够的内存 (RAM) 来创建映像。
我不是程序员,但 Ubuntu 在休眠之前不这样做似乎不合逻辑?它显然做了类似的事情,因为重复的休眠尝试最终会产生相同的结果,但显然它在尝试休眠之前不会这样做。在休眠时将所有缓冲区和缓存也写入磁盘肯定是低效的,因为即使不再需要它们,也必须在恢复时重新加载它们。如果 Ubuntu 在休眠之前转储缓存,或者至少转储一段时间未使用的部分,肯定会更有效率?
事实上它不这样做,可能就是为什么建议将交换空间的大小增加一倍 RAM 的原因;这非常低效,特别是在 SSD 时代,如果你有 16GB 的 RAM,你就会失去 32GB(可能是你硬盘空间的一半)的空间给一个只用于休眠的交换文件。
随着 RAM 容量的不断增加,我认为这是一个需要研究的领域。高清空间可能很便宜,但这不是因效率低下而浪费它的借口。
答案2
我发现我的问题可能与其他东西完全有关,而不是缓冲区和缓存已满的事实。
在我上次发帖几天后,如果不运行磁盘检查,我就无法启动,但磁盘检查挂起并且从未完成。我最终设法手动完成磁盘检查,它发现了很多错误,然后修复了这些错误。
一时兴起,我再次尝试休眠,没有使用下面的命令来清空缓存,结果成功了。从那以后,我第一次休眠时都没有问题,即使有时 RAM 的使用率为 30-40%,也不需要先清除缓存,而且总是成功。
因此,最初的错误似乎与磁盘错误有关,与可用内存无关,一旦修复这些错误,问题就消失了。因此,如果您收到上述错误,您可能希望在尝试任何其他操作之前检查所有分区是否存在错误。
希望这对某人有用。
答案3
同样的事情也发生在我这里,最后我用的是两位用户写道对他们有用:
我已将 swappiness 设置为 0。将其更改为 10 后,无论内存使用情况如何,休眠现在都能正常工作。