Linux OOM磁盘I / O.另外:交换,有什么好处?

我在我的一个 Linux(2.6.37)安装上遇到了OOM杀手的问题.这台电脑有4GB的内存,我有时会充分利用它.在这些情况下,我希望OOM处理程序能够通过杀死一两个进程来完成它的工作.而不是这样做,或者也许在尝试这样做时,系统会锁定,执行磁盘I / O,就像没有明天一样.事情就是这样:我没有启用任何交换.由于某种原因,我的无交换系统仍然锁定了大量的磁盘I / O,即使适当的操作过程只是杀死一两个进程.思考?

整个问题让我想知道Linux是否需要以某种我不知道的方式进行交换.解释是否是这种情况以及为什么会受到高度赞赏.我熟悉交换概念层面的想法(即虚拟内存,分页,过度使用),但我想知道是否有任何我可能错过的实现细节.

解决方法

真正的问题是,为什么你没有交换运行?特别是如果你看到(严重的)与RAM耗尽有关的性能问题?你知道没有交换实际上会让你的系统变慢,对吗?

显而易见的解决方案是添加一些交换空间,而不是让你的系统丢失.考虑到磁盘空间有多便宜,我想不出任何常见的情况,你应该在没有交换的情况下构建一个系统.

至于回答你的问题,我不记得关于为什么交换很重要的所有低级细节,即使在你不会耗尽内存的系统上,但是在Linux内核邮件列表上有关于是否在没有交换的情况下运行系统是合理的(并且没有很多确凿的答案).普遍的共识通常是始终具有交换,并根据需要调整交换.

另外,我认为你误解了有关Linux OOM杀手的一些重要警告.首先,依靠它来处理你的内存不足问题是一个非常糟糕的想法(tm).它可以非常不加区别地杀死它,你完全有可能留下一个不稳定甚至无法使用的系统.是的,它试图杀死最近进程,这些进程占用了大量内存(一个小小的保护措施,试图赶上逃跑过程),但是没有任何保证.我已经看到它杀死ssh,杀死Xen进程(在Xen虚拟主机服务器上,导致VM崩溃),并且在一种情况下它杀死了NFS.

至于IO. . .我不确定会导致什么.文件系统或磁盘相关进程可能已被杀死?当一个进程无法分配足够的内存时,它可能会内置某种“缓存到磁盘”功能?

另请注意,如果这是桌面,则挂起到磁盘需要交换.如果它是一台服务器,那么依赖OOM永远不是一个好主意,因为它会影响稳定性,完全没有理由.

[1]嵌入式系统是唯一明显的例外,它们并不是特别常见(如果您正在处理嵌入式系统,那么您已经开始意识到这些要求).

相关文章

查找全部容器的日志文件 $ sudo find /var/lib/docker/conta...
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型