最近阿里雲的伺服器因為開著http服務,經常因為沒有記憶體出現 Out of memory: Kill process,運氣不好kill掉了sshd之後, 伺服器就只能重啟了。
上google研究了一下, 找到了一些配置方法。記錄一下,備忘。
sysctl vm.panic_on_oom=1
sysctl kernel.panic=X
echo "vm.panic_on_oom=1" >> /etc/sysctl.conf
echo "kernel.panic=X" >> /etc/sysctl.conf
上面配置可以讓linux在出現 Out of memory之後重啟。
echo -15 > /proc/2592/oom_adj
這會讓 oom 在出現 Out of memory後,儘量不去kill這個程式。
echo 10 > /proc/2592/oom_adjoom
會優先考慮kill這個程式。
echo -17 > /proc/2592/oom_adj
oom在Out of memory時, 不會kill該程式。
oom_adj的值在-16 到 +15之間,值越高被kill的優先度越高,如果設為 -17, 這程式不會被kill掉。
sysctl vm.overcommit_memory=2
echo "vm.overcommit_memory=2" >> /etc/sysctl.conf
可以完全關掉oom, 不過這並不建議,關掉後可能會出現未知的情況。