有没有办法在守护进程(我的情况是 Apache)启动时设置 OOM 终止程序调整值?我想让 Apache 进程被终止的可能性更高,并使一些更重要的服务几乎不可能被 OOM 终止程序终止。
答案1
我认为最好的办法是将一个单独的脚本添加为 init.d 的一部分。在其中,您需要执行如下操作
echo 15 > /proc/`pidof APP_NAME`/oom_adj
将pidof APP_NAME
检索具有该名称的应用程序的进程 ID。将 15 写入 /proc/{pid}/oom_adj 会增加进程 {pid} 的“不良程度”,使其更有可能被 OOM 终止程序终止。
文章驯服OOM杀手LWN.net 还暗示了一些其他想法,这些想法被建议允许指定“oom_victim”,但我不确定它们中是否有任何一个实际上存在于内核中。
顺便说一句:最好的解决方案是首先避免使用 OOM Killer。记住微软不成文的座右铭:没有更多的 RAM 无法解决的问题。
[注意:如果存在多个这样的过程,您可能需要稍微修改一下代码。]
答案2
对于 ubuntu 15.04,这已经改变了。
设置 pid 的 oom 设置的正确方法是
echo 42 > /proc/666/oom_score_adj
代替/proc/666/oom_adj