公司伺服器每天會定時重啟tomcat服務,但是某天用top命令檢視有定時任務的殭屍程序 ps -ef|grep defunct
登入到主機發現伺服器上有
2個名稱為
[sh]
的程序
ps –ef
帶程序號查
發現是殭屍程序是
restarttomcat.sh這類程序
殺掉這些殭屍程序
單純使用kill -9 程序號是無法殺掉,需要kill -9 父程序號,子程序會自動被init程序接管,釋放。
查詢父程序是
cron
,root
下有cron任務
[root@server mail]# crontab -l
50 23 * * * /bin/bash restarttomcat.sh
造成這些現象的原因是crontab
中的程式執行,導致輸出大量資訊到標準裝置上。
crontab
計畫內容中定義命令
,如果有大量輸出資訊
,將會造成殭屍程序
(defunct)
;這時候應該在定義的命令後邊加上
"> /dev/null 2>&1"
解決辦法:
把cron任務的輸出定向到空裝置上
即將crontab裡面的每行命令後面加上 > /dev/null 2>&1
殭屍程序和如何刪除殭屍程序
當乙個子程序結束後,他的父程序沒有等待他 wait waitpid 清除他的所有資源時,它就變成乙個殭屍程序。在linux系統中,在每個程序退出的時候,核心釋放該程序所有的資源,包括開啟的檔案,占用的記憶體等。但是仍然為其保留一定的資訊 包括程序號the process id,退出狀態the ter...
檢視殭屍程序並殺掉殭屍程序
在運維過程中,我們經常會碰到機器由於某幾個特殊的殭屍程序造成整台伺服器上的程序異常卡死,負載變高。例如以下 其中,存在8個殭屍程序,並且程序19712的cpu使用異常。檢視具體的殭屍程序有哪些 發現這些子殭屍程序的父程序即為19712程序。其對應的其實就是namenode程序 解決辦法 1 如果業務...
Defunct程序 殭屍程序
下面談談 defunct 程序,中文翻譯叫殭屍程序。下文整理於網路以及apue一書。一 什麼是殭屍程序 在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序。當用ps命令觀察程序的執行狀態時,看到這些程序的狀態列為defunct。殭屍...