平常我們在用 top 命令來檢視站群伺服器的狀態十分正常的時候,用下面的命令找出僵死程式
ps -A -o stat,ppid,pid,cmd | grep -e ‘^[Zz]’
命令註解:
-A 引數列出所有程式
-o 自定義輸出欄位 我們設定顯示欄位為 stat(狀態), ppid(程式父 id), pid(程式 id),cmd(命令)這四個引數
-C 用來指定所執行的命令名稱,你這裡也就是讓 ps 僅僅顯示 php 命令所產生的程式的資訊
ps -C java -o lstart,pid,cmd【不過貌似列印的不全~】
ps -A -o lstart,pid,args |grep java【這個可以的~】
因為狀態為 z 或者 Z 的程式為殭屍程式,所以我們使用 grep 抓取 stat 狀態為 zZ 程式
執行結果參考如下這裡一共出現了 9 個僵死程式,我們需要把它們都幹掉,執行下面的命令
kill -9 8310
這時你再執行查詢僵死的程式,發現所有僵死程式都沒了.
補充:
最近又遇到了個問題,一臺站群伺服器上產生了 100 多少僵死程式,而且每一僵死程式的父程式都不一樣,如果用上面的方法,一條一條的殺,那還不得累死我啊。
那麼就應該想一條簡單的命令,直接查詢僵死程式,然後將父程式殺死~
ps -A -o stat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’ | xargs kill -9