peo*_*oro 47 linux memory freeze
我有一个 eeePC 900a:它有一个 8GB 的闪存作为磁盘,只有 1GB 的 RAM。安装在其上的 Linux 发行版是 ArchLinux。
当系统内存不足时,它会变得非常无响应:执行诸如切换到 TTY1 甚至移动鼠标指针之类的操作需要几秒钟/几分钟的时间。有时看起来系统只是冻结了:我们三个之前我就不管了,到目前为止什么都没有改变。
我宁愿避免在这台 eeePC 上创建交换分区/文件,因为磁盘已经那么小,而且交换空间上的许多写入会大大缩短闪存卡的寿命。此外,我认为交换文件/分区只会移动问题,而不是绝对修复它。
内核是否应该在内存不足时杀死一些随机应用程序?为什么这样做会失败(或需要很长时间)?
几个月/几年前,我已经尝试进一步研究这一点,但找不到任何实际可行的方法......
Ark*_*lar 16
可以通过键盘组合直接调用OOM-killer(内存不足杀手):
SysRq-F
SysRq 键通常与键盘上的 PrtSc 键组合在一起。
OOM-killer 杀死一些进程(-es),系统再次响应。
感谢 Raman 在上面的评论中提供有关此功能的建议。
PS:这对我帮助很大。我同意这样的观点,如果它是由 Chrome 或任何内存贪婪软件引起的,这是关于该问题的最有用的建议。但是您需要记住,OOM-killer 可能会杀死一些非常重要的进程,请谨慎使用。
Gil*_*il' 12
事情的自然状态是应用程序数据在 RAM 中,而文件在磁盘上。
在性能方面,理想的状态是经常使用的数据在 RAM 中,而目前不需要的数据在磁盘上。
在正常系统上,内核会做两件事来尝试达到这个理想:
在典型系统上,RAM 的很大一部分专门用于缓存和缓冲区(50% 是典型数字)。由于 RAM 是一种有限资源,这可能需要替换一些应用程序数据以进行交换(只有在有更好的方式使用 RAM 时才需要交换)。
在没有交换的系统上,有时应用程序数据几乎使用了所有 RAM,因此几乎没有任何空间可用于缓存。那么系统很可能会变慢。内核不会开始杀死应用程序,直到它真的必须这样做。只要应用程序只填满 99% 的可用内存,系统就会继续运行,但速度非常慢,因为必须始终从磁盘加载和重新加载文件数据。运行相同的应用程序时,系统会在此时使用交换更快。
有关此问题的更多信息,请参阅此 lkml 讨论和此博客文章。
我不知道有什么直接的方法可以告诉内核为磁盘缓存保留最少的 RAM。您可以将 RAM 的一小部分设置为交换空间,甚至可以压缩。在这方面有成功的报告,但我对您的特定情况不做任何保证。
peo*_*oro 10
最近我找到了解决我问题的方法。
由于 Linux OOM 杀手无法正常工作,我开始使用用户空间 OOM 杀手:earlyoom。它是用 C 编写的,相当可配置,对我来说就像一个魅力。
我也听说过一些替代方案,例如Facebook 的 OOMD,开发用于在他们的服务器上运行,但我还没有尝试过这个
这是自 2007 年以来的一个已知错误 - 请参阅系统冻结高内存使用率。
在这种情况下,Windows 会显示一个对话框,警告用户关闭一个或多个应用程序。