2

実験的な Java アプリケーションを実行していますが、アプリケーションを強制終了または停止するたびに、ゾンビ プロセスが作成されます。ゾンビは(おそらく)リソースを消費しないため、実際には問題にならないことはわかっています。ただし、RAM の空き容量が本来よりも大幅に少なくなります。ここにのダンプがあります

ps aux | grep java

3052  8.5  0.0      0     0 ?        Zl   Sep24 127:24 [java] <defunct>
6644  0.9  0.0      0     0 ?        Zl   Sep24  13:20 [java] <defunct>
8325  0.7  0.0      0     0 ?        Zl   Sep24  11:01 [java] <defunct>
8954  0.7  0.0      0     0 ?        Zl   Sep24  11:01 [java] <defunct>
16229  1.3  0.0      0     0 ?        Zl   Sep24  16:57 [java] <defunct>
19222  106  0.0      0     0 ?        Zl   Sep24 1346:37 [java] <defunct>

次の作品のどれも:(

kill -9 PID , kill -1 PID, kill -KILL PID 

マシンを再起動できません! ですから、どんな解決策も大歓迎です。

4

1 に答える 1

8

wait(2) の man ページには、次のように記載されています。

終了したが、待っていなかった子は「ゾンビ」になります。カーネルは、ゾンビ プロセスに関する最小限の情報 (PID、終了ステータス、リソース使用情報) を保持して、親が後で子に関する情報を取得するために待機できるようにします。ゾンビが待機によってシステムから削除されない限り、ゾンビはカーネル プロセス テーブルのスロットを消費します。このテーブルがいっぱいになると、それ以上プロセスを作成できなくなります。親プロセスが終了すると、その「ゾンビ」の子 (存在する場合) が init(8) によって採用され、ゾンビを削除するための待機が自動的に実行されます。

したがって、ゾンビのプロセス IDを探して、これらを強制終了する必要があります。その後init、ゾンビを埋めます。このために、ps -fまたはpstreeあなたを助けます。

于 2012-09-25T17:47:49.223 に答える