Linux OOM杀手禁用灾难

我有一个没有交换的Linux机器,其中vm.overcommit_memory=2vm.overcommit_ratio=100设置。 但是这些设置似乎没有效果。 一些试图消耗大量内存的新启动进程仍然被OOM杀死,而不是被拒绝内存分配。 是因为在sysctl -w vm.overcommit_memory=2 vm.overcommit_ratio=100之前启动的进程sysctl -w vm.overcommit_memory=2 vm.overcommit_ratio=100 (例如,在启动时应用/etc/sysctl.conf之前)可能仍然能够访问其overcommitted内存,从而触发OOM杀手? 是否有可能(1)使用内核参数禁用内存过量使用,或(2)在运行时强制内核为所有进程分配所有过度使用的内存?

编辑:浏览相关的Documentation/和一些Linux源代码(git c6fa8e6de3) (1)似乎不太可能。

你正在尝试一些根本不可能的事情。 如果让系统运行在接近耗尽状态,那么由于内存耗尽,总会有一个进程被杀死的可能性。 有很多情况是无法避免的,但是最容易理解的是页面错误是由一个进程添加一个页面到它的堆栈造成的。

如果你想避免死亡,你需要交换或RAM缓冲。