天天看點

伺服器記憶體超限問題_伺服器記憶體爆滿最佳處置方案

記憶體爆滿截圖:

伺服器記憶體超限問題_伺服器記憶體爆滿最佳處置方案

分析:記憶體持續飙升,應該是有大量記憶體一直沒有釋放,考慮僵屍對象,僵屍程序,最簡單的就是重新開機伺服器,但是就無法找到罪魁禍首了。

驗證: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=""