基本概念:
Linux 內核有個機制叫OOM killer(Out Of Memory killer),該機制會監控那些占用內存過大,尤其是瞬間占用內存很快的進程,然后防止內存耗盡而自動把該進程殺掉。內核檢測到系統內存不足、挑選並殺掉某個進程的過程可以參考內核源代碼linux/mm/oom_kill.c,當系統內存不足的時候,out_of_memory()被觸發,然后調用select_bad_process()選擇一個”bad”進程殺掉。如何判斷和選擇一個”bad進程呢?linux選擇”bad”進程是通過調用oom_badness(),挑選的算法和想法都很簡單很朴實:最bad的那個進程就是那個最占用內存的進程。
如何查看:
grep "Out of memory" /var/log/messages
查看系統日志方法:
運行egrep -i -r 'killed process' /var/log命令,結果如下:
也可運行dmesg命令,結果如下: