Linux僵死進程查看和解決

最近工作過程中,發現好幾臺服務器出現僵死進程(如圖)。

點擊查看原圖

  用下面的命令找出僵死進程

  ps-A-ostat,ppid,pid,cmd|grep-e'^[Zz]'

  命令註解:
  -A參數列出所有進程
  -o自定義輸出字段我們設定顯示字段爲stat(狀態),ppid(進程父id),pid(進程id),cmd(命令)這四個參數

-C用來指定所執行的命令名稱,你這裏也就是讓ps僅僅顯示php命令所產生的進程的信息
ps-Cjava-olstart,pid,cmd【不過貌似打印的不全~】
ps-A-olstart,pid,args|grepjava【這個可以的~】
  因爲狀態爲z或者Z的進程爲殭屍進程,所以我們使用grep抓取stat狀態爲zZ進程
  運行結果參考如下

點擊查看原圖

  這裏一共出現了9個僵死進程,我們需要把它們都幹掉,執行下面的命令

  kill-98310

  這時你再執行查找僵死的進程,發現所有僵死進程都沒了.

  補充:

  最近又遇到了個問題,一臺服務器上產生了100多少僵死進程,而且每一僵死進程的父進程都不一樣,如果用上面的方法,一條一條的殺,那還不得累死我啊。
  那麼就應該想一條簡單的命令,直接查找僵死進程,然後將父進程殺死~

  ps-A-ostat,ppid,pid,cmd|grep-e'^[Zz]'|awk'{print$2}'|xargskill-9

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章