在 Linux 上禁用只读页面的交换等等?

在 Linux 上禁用只读页面的交换等等?

有什么方法可以防止 Linux 交换任何事物而是当物理 RAM 耗尽时直接进入 OOM killer?

背景

我有一台 Linux 工作站,它偶尔会耗尽内存。发生这种情况时,它将无法恢复。(无论是否启用交换,情况都是如此,我见过这两种情况。)

在这种情况下,我希望 OOM 终止程序开始终止进程​​并持续执行,直到系统恢复或崩溃(两者之一,或两者之间的任何情况,都比无限期挂起要好)。有趣的是,即使禁用交换也不会发生这种情况,而是系统会给出正在交换的指示(东西可以工作,只是速度要慢几个数量级)。

我目前的理论是,Linux 仍在交换它认为由磁盘支持的数据,例如可执行文件和 mmap 文件的只读页面。

注意:我已经花费了一些精力,尝试了多种限制内存使用的技术。如果不妨碍正常运行,我做不了更多了。我真的在寻找一种“杀死它们,让用户自己解决”的解决方案。

答案1

我不知道这是否适用于所有 Linux 发行版。

使进程不太可能被杀死。nnn = pid

echo -15 > /proc/nnn/oom_adj

我们可以通过执行以下操作使 OOM 终止程序更有可能终止 nnn 进程。

echo 10 > /proc/nnn/oom_adj

然而。

在我看来,这听起来不是一个很好的解决方案。在考虑这种事情之前,我会做一些限制进程资源的事情。ulimit 就是出于这个原因。如果您已经这样做了,这不会使您当前的方法无效。但我想它确实回答了这个问题。它需要你:

监控事物并采取行动以杀死

如果您“知道”没有某样东西您也能活下去,那么请先验地采取这种终止方法。这引发了一个问题 - 如果您没有它也能活下去,那么为什么要运行该进程?

相关内容