記憶體爆滿截圖:
分析:記憶體持續飙升,應該是有大量記憶體一直沒有釋放,考慮僵屍對象,僵屍程序,最簡單的就是重新開機伺服器,但是就無法找到罪魁禍首了。
驗證:top指令檢視活躍程序的資源使用情況。(top指令是Linux下常用的性能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似于Windows的任務管理器。)
顯然活躍程序占用的記憶體并不多,造成記憶體爆滿的另有它因。
ps -aux 檢視目前系統的程序狀态。看到有大量的postdrop和sendmail
順藤摸瓜,就找到了sendmail和postdrop上,通過重新開機postfix,記憶體使用立馬斷崖式下跌。問題暫時得到解決。如下圖所示
終極解決方案:
postdrop是由sendmail啟動的,而sendmail又是由crond啟動的。是以根在crond服務上。
問題成因:crond在執行腳本時會将腳本輸出資訊以郵件的形式發送給系統使用者,是以必然要調用sendmail,而sendmail又會調用postdrop發送郵件,但是如果系統的postfix服務沒有正常運作,那麼郵件就會發送不成功,造成sendmail、postdrop、crond程序就無法正常退出,形成大量的僵屍程序
解決辦法:先把僵屍程序都幹掉ps -ef | egrep "sendmail|postdrop" | grep -v grep |xargs kill,讓記憶體降下來,其實我一開始就是将postfix服務重新開機了一下,問題就解決了,觀察了一段時間,僵屍程序并沒有再次出現。
為防以後postfix挂了再出現類似問題,可以進行如下配置,将crond的郵件通知關閉:
将/etc/crontab和/etc/cron.d/0hourly裡的MAILTO=root修改為MAILTO=""
crontab -e第一行增加一段MAILTO=""