在Linux上防止内存不足(OOM)冻结的最佳方法是什么?

gat*_*ado 28 linux memory out-of-memory linux-kernel

有没有办法让OOM杀手工作并阻止Linux冻结?我一直在运行Java和C#应用程序,其中通常使用分配的任何内存,并且(如果我正确理解它们)过度使用会导致计算机冻结.现在,作为临时解决方案,我补充道,

vm.overcommit_memory = 2
vm.overcommit_ratio = 10
Run Code Online (Sandbox Code Playgroud)

到/etc/sysctl.conf.

对任何能够解释为什么现有OOM杀手无法以保证方式正常运行的人都感到荣幸,只要内核耗尽"真实"内存就终止进程.

编辑 - 许多回应都与迈克尔的反应一致"如果你遇到与OOM杀手相关的问题,那么你可能需要修复任何导致你内存不足的问题".我不认为这是正确的解决方案.总会有应用程序出现错误,我想调整内核,这样我的整个系统就不会冻结.鉴于我目前的技术理解,这似乎不应该是不可能的.

Syn*_*r0r 1

如果您的进程的 oom_adj 设置为 -17,则不会考虑杀死它,但我怀疑这是这里的问题。

cat /proc/<pid>/oom_adj

会告诉您进程的 oom_adj 值。