私の組み込みシステムが数時間実行された後に応答しません。調査の結果、システムはプロセスのリストが増え続けていることを示しました<defunct>
。実行するとps axl
長いリストが表示され、そのうちの1つは次のとおりです。
1 0 6421 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
1 0 6429 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
1 0 6476 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
1 0 6497 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
このプロセスを終了することはできません。これらのプロセスが増加すると、すべてのRAMが消費され、システムが応答しなくなる可能性があります。もう1つの問題は、<defunct>
起動時にinitスクリプトによって実行されるプロセスを終了しようとすると、そのプロセスも消えることです。なぜこれらのゾンビプロセスがinitによって終了されず、RAMが不足しているのかについての手がかりが見つかりません。
答え1
死んだプロセスはかなりのメモリを消費せず、pid、戻り状態、およびリソース使用量統計を格納するために少数のバイトしか使用しません。
ただし、正常に実行されるUnix / Linuxオペレーティングシステムでは、initが親である失敗したプロセスは後者によって迅速にリサイクルされる必要があります。
システムに深刻な問題があります。これは、観察中のメモリリークを説明することもできます。
答え2
他の人と同様に、これらの死んだプロセスがかなりの量のRAMを使用しているかどうか疑わしいです。また、ps
メモリ使用量を詳しく説明する列にゼロがあることを出力で見ることもできます。
Defnct(またはゾンビZのソース)プロセスは終了できず、親プロセスが終了ステータスを読み取るまでプロセステーブルに残ります。したがって、親プロセスを回復する必要があります。
答え3
#ps auxwwwを使ってゾンビを見つけましょう。 grep -w Z | grep -v grep |
これらのゾンビプロセスの親プロセスIDを確認して終了します。
答え4
問題の根本原因はハードウェアエラーです。ttyS1
システムポートは毎秒数千の割り込みを受け取り、プロセスヒープがkworker
生成されクリーンアップ<defucnt>
されませんinit
。init
@jilliagreが提案したように、これはバグかもしれません。
無効にするとgetty
問題ttyS1
が解決しました。