OOM_killer是Linux自我保護的方式,當內存不足時不至於出現太嚴重問題,有點壯士斷腕的意味
在kernel 2.6,內存不足將喚醒oom_killer,挑出/proc/<pid>/oom_score最大者並將之kill掉
爲了保護重要進程不被oom-killer掉,咱們能夠:echo -17 > /proc/<pid>/oom_adj,-17表示禁用OOM
sysctl -w vm.panic_on_oom=1 (默認爲0,表示開啓)
sysctl -p
值得注意的是,有些時候 free -m 時還有剩餘內存,但仍是會觸發OOM-killer,多是由於進程佔用了特殊內存地址
平時咱們應該留意下新進來的進程內存使用量,省得系統重要的業務進程被無辜牽連
可用 top M 查看最消耗內存的進程,但也不是進程一超過就會觸發oom_killer
參數/proc/sys/vm/overcommit_memory能夠控制進程對內存過量使用的應對策略
當overcommit_memory=0 容許進程輕微過量使用內存,但對於大量過載請求則不容許(默認)
當overcommit_memory=1 永遠容許進程overcommit
當overcommit_memory=2 永遠禁止overcommit