天天看點

一次腳本和crond引發的系統故障

今天早上來到公司,第一件事就是打開監控看下情況。一看吓死人,幾乎所有的伺服器負載全部跑到1千多,但是我又沒有收到郵件報警:(故障如下)

<a href="http://s3.51cto.com/wyfs02/M01/57/77/wKioL1Sbbm7jDfXlAAIVAP5HcUM270.jpg" target="_blank"></a>

排錯步驟:

(1)登入其中一台機器。發現負載很正常。而且沒有收到郵件。那說明應該就是監控機的問題了。

(2)登入監控機。top指令檢視如下:

<a href="http://s3.51cto.com/wyfs02/M00/57/7A/wKiom1Sbbtmgk9m5AASqInjaYQk209.jpg" target="_blank"></a>

(3)看到下面有很多bash的指令,就應該了解到,應該是某個腳本死循環照成的,先不關心誰寫的趕緊解決再說。

(4)檢視一下到底是哪個腳本死循環。用ps -ef | grep bash .檢視是一個死循環的腳本引起的。(是一個for循環,sleep3秒。主要是一個curl 的腳本檢查完整的傳回值。)

(5)檢視是否有定時任務,因為假如隻有一條循環不會造成這麼多。簡單檢視程序,原來是定義了5個星号;怪不得會這麼多,因為本來機已經死循環了,再用crontab來執行,那負載高是正常的。

(6)停掉crontab程序./etc/init.d/crond stop.

 (7)執行指令殺掉所有的腳本程序。ps -ef | grep /root/moni | awk '{print $2}' | xargs kill -9

(8)執行完之後。發現還沒有降下來,還有很多的郵件隊列,順便也把所有的郵件程序Kill。

(9)但是還沒有發現有效果順便把腳本直接删除(這步不應該執行。)

(10)發現負載還是很高。再次用top打開檢視的時候發現很多僵死程序。

<a href="http://s3.51cto.com/wyfs02/M01/57/78/wKioL1Sbcynw0ef2AAD4vKz1IrU509.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/57/78/wKioL1Sbd83B0QgUAADMGTAwuEQ917.jpg" target="_blank"></a>

總結分析:注意,當我們寫for 或者死循環的時候,直接背景執行一次就可以了,不用加到定時任務,否則會照成不必要的麻煩。腳本已經被删除,無法展示。

本文轉自 小羅ge11 51CTO部落格,原文連結:http://blog.51cto.com/xiaoluoge/1595759,如需轉載請自行聯系原作者