Linux のゾンビ プロセスの発生原因、OSとシステムへの影響 負荷について

Linux のゾンビ プロセスの発生原因、OSとシステムへの影響 負荷について調べてみました。

 

海外のサイトで詳しく書かれていて、分かりやすい記事があったので、共有します。

 

ゾンビプロセスとは何ですか?
簡単に言うと、ゾンビ プロセスは、実行は完了したがシステムのプロセス テーブルに残っている死んだプロセスです。本物のゾンビとは異なり、アクティブな機能を持たず、システム リソースも消費しません。代わりに、これらは単なるプレースホルダーであり、親プロセスが終了ステータスを取得するのを待っています。親プロセスがこの情報を取得すると、ゾンビ プロセスはプロセス テーブルから削除され、最後の行程が完了し、システムが占有していたリソースを再利用できるようになります。

 

ゾンビプロセスはどのように作成されるのでしょうか?
ゾンビ プロセスがどのように発生するかを理解するには、Linux のプロセスのライフサイクルを詳しく調べる必要があります。プロセスが親プロセスによってフォーク (作成) されると、実行が完了するまでさまざまな段階を経ます。通常、子プロセスは実行を終了すると、親プロセスに終了ステータスを送信します。この終了ステータスには、子の終了に関する情報 (子プロセスが正常に終了したか、エラーが発生したかなど) が含まれています。

ただし、親プロセスがこの終了ステータスを収集する前に、子プロセスは「ゾンビ」状態のままになります。この状態は、準備ができたときに親が終了ステータスを収集できるようにするために不可欠です。wait()親がや などのシステム コールを使用して終了ステータスを取得するとwaitpid()、ゾンビ プロセスがプロセス テーブルから取得され、そのリソースが解放されます。

 

 

ゾンビプロセスの一般的な原因
1. 不適切な親プロセスの動作:ゾンビ プロセスの主な原因は、親プロセスが子の終了ステータスを即座に取得できない場合にあります。これは、プログラミング エラー、アプリケーションの不適切な設計、またはプロセス終了信号の不適切な処理によって発生する可能性があります。

2. 親プロセスの終了:子プロセスの終了ステータスを取得する前に親プロセスが終了した場合、孤立した子プロセスは init プロセス (PID 1) に採用されます。init プロセスは、孤立したプロセスの終了ステータスを自動的に収集し、それらがゾンビになるのを防ぎます。

 

ゾンビプロセスの影響
ゾンビ プロセスはシステム リソースを積極的に消費しませんが、その存在はシステム パフォーマンスに影響を与え、混乱を引き起こす可能性があります。時間の経過とともに、ゾンビ プロセスが蓄積すると、プロセス テーブル エントリを含むシステム リソースが使い果たされ、パフォーマンスの低下につながる可能性があります。

さらに、監視ツールや管理者は、ゾンビ プロセスの存在をシステムの過負荷や潜在的なセキュリティ問題の兆候として誤解する可能性があります。したがって、これらのゾンビプロセスを効果的に特定して管理する方法を理解することが重要です。

 

 

ゾンビプロセスの管理
1. ゾンビ プロセスの特定: さまざまなツールやコマンドがゾンビ プロセスの特定に役立ちます。ps コマンドに aux または axo オプションを指定すると、ゾンビ プロセスを含むプロセスのステータスを表示できます。さらに、top、htop、またはシステム監視ダッシュボードなどの監視ツールは、システムのプロセス状態に関するリアルタイムの情報を提供し、ゾンビ プロセスを強調表示できます。

2. トラブルシューティングデバッグ: ゾンビ プロセスを特定したら、その存在の原因となっている親プロセスを調査することが重要です。strace などのデバッグ ツールや「lsof」などのシステム監視ユーティリティは、親プロセスを追跡し、子の終了ステータスを取得できなかった理由を理解するのに役立ちます。プログラミング エラーを修正するか、適切な信号処理を確保することで、将来のゾンビ プロセスの作成を防ぐことができます。

3. システムの再起動: ゾンビ プロセスが蔓延したり、トラブルシューティングを行っても存続する場合は、システムの再起動が最後の手段となります。再起動するとプロセス テーブルがクリアされ、他のシステム状態とともにすべてのゾンビ プロセスが削除されます。

4. プロセスの刈り取り: 場合によっては、ゾンビ プロセスを手動で刈り取る必要がある場合があります。これは、親プロセスにシグナルを送信するか、親プロセス コード内wait()またはwaitpid()親プロセス コード内でシステム コールを使用することによって実現できます。親プロセスは終了ステータスを明示的に収集することで、ゾンビ プロセスが残留しないようにできます。

 

「参考」

Understanding the Zombie Processes in Linux – TecAdmin

 

Anker PowerCore 10000 (10000mAh 大容量 モバイルバッテリー)【PSE技術基準適合/PowerIQ搭載】 iPhone&Android対応 (ブラック)