我有生產(chǎn)單位,其中java進(jìn)程已成為僵尸并保持在那里一段時(shí)間.如果重啟設(shè)備,則會(huì)清除它.但是,該單元未重新啟動(dòng),另一個(gè)Java進(jìn)程已啟動(dòng)并正在運(yùn)行.如果這個(gè)僵尸狀態(tài)仍然沒(méi)有清除它,是否有任何問(wèn)題,?它會(huì)以任何方式影響(表現(xiàn)還是緩慢),? 解決方法: 由于Zombie進(jìn)程不會(huì)耗盡任何系統(tǒng)資源,因此僵尸進(jìn)程不會(huì)對(duì)性能或速度產(chǎn)生任何影響.
注意: – 實(shí)際上,它仍然使用PID(這是一種有限的資源),并且仍然分配了進(jìn)程的內(nèi)核數(shù)據(jù)結(jié)構(gòu). 通常,這并不重要,但內(nèi)核內(nèi)存使用情況可以 在內(nèi)存非常有限的系統(tǒng)上很重要
Problem caused by zombie process
Each zombie process retains its process ID . Linux systems have a
finite number of process IDs – 32767 by default on 32-bit
systems.If zombies are accumulating at a very quick rate ,the entire
pool of available PIDs will eventually become assigned to zombie
processes, preventing other processes from launching.
?? ??注意:在64位系統(tǒng)上,可以增加最大PID,請(qǐng)參見(jiàn)https://unix./a/16884/170373
然而,一些僵尸進(jìn)程閑置是沒(méi)有問(wèn)題的 – 雖然它們確實(shí)表明他們的系統(tǒng)上的父進(jìn)程存在錯(cuò)誤.
說(shuō)明:
當(dāng)進(jìn)程在Linux上死亡時(shí),它不會(huì)立即全部從內(nèi)存中刪除 – 它的進(jìn)程描述符保留在內(nèi)存中.
進(jìn)程的狀態(tài)變?yōu)镋XIT_ZOMBIE,并通知進(jìn)程的父進(jìn)程其子進(jìn)程已因SIGCHLD信號(hào)而死亡.
然后,父進(jìn)程應(yīng)該執(zhí)行wait()系統(tǒng)調(diào)用以讀取死進(jìn)程的退出狀態(tài)和其他信息.這允許父進(jìn)程從死進(jìn)程中獲取信息.調(diào)用wait()后,僵尸進(jìn)程將從內(nèi)存中完全刪除.
這通常很快發(fā)生,因此您不會(huì)在系統(tǒng)上看到僵尸進(jìn)程累積.但是,如果父進(jìn)程沒(méi)有正確編程并且從不調(diào)用wait(),那么它的僵尸孩子會(huì)在內(nèi)存中留下來(lái)直到它們被清理干凈.
解析度:
你不能殺死僵尸進(jìn)程,因?yàn)槟憧梢允褂肧IGKILL信號(hào)殺死正常進(jìn)程 – 僵尸進(jìn)程已經(jīng)死了.
殺死僵尸的一種方法是將SIGCHLD信號(hào)發(fā)送給父進(jìn)程.此信號(hào)告訴父進(jìn)程執(zhí)行wait()系統(tǒng)調(diào)用并清理其僵尸子進(jìn)程.使用kill命令發(fā)送信號(hào),將下面命令中的pid替換為父進(jìn)程的PID:
kill -s SIGCHLD pid
當(dāng)創(chuàng)建僵尸的進(jìn)程結(jié)束時(shí),init繼承僵尸進(jìn)程并成為他們的新父進(jìn)程. (init是在啟動(dòng)時(shí)在Linux上啟動(dòng)的第一個(gè)進(jìn)程,并被分配了PID 1.)
注意: – 從Linux 3.4開(kāi)始,進(jìn)程可以使用PR_SET_CHILD_SUBREAPER選項(xiàng)發(fā)出prctl()系統(tǒng)調(diào)用,因此它們(而不是進(jìn)程#1)將成為其孤立后代進(jìn)程的父進(jìn)程.參見(jiàn):https://unix./a/177361/5132
然后INIT執(zhí)行wait()系統(tǒng)調(diào)用來(lái)清理它的僵尸子節(jié)點(diǎn),因此init將對(duì)僵尸進(jìn)行簡(jiǎn)短的工作.關(guān)閉后,您可以重新啟動(dòng)父進(jìn)程. 來(lái)源:https://www./content-3-383401.html
|