平常我們在用 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