[Reference:<_A392@delegate-ja.ML_>]
Newsgroups: mail-lists.delegate-ja
[DeleGate-Ja] Re: Delegate 子プロセスがゾンビになる原因について
In message <_A392@delegate-ja.ML_> on 03/01/10(21:10:43)
you necss@北薗 <praaqbrv6-qprr6uapcja6.ml@delegate.org> wrote:
|お世話になります。NECフィールディングの北薗と申します。
|
|Linux環境 で Delegate を利用させて頂いています。
|
|監視ソフトの方でゾンビプロセスを検知したらアラートを
|あげる仕掛けにしているのですが、Delegate を稼動して
|2ヶ月で何回かアラートを検知しました。
|(ゾンビプロセスとして検知されるのはDelegaetの子プロセスです)
|
|親Delegaet のSIGCHLD監視で、ゾンビプロセスを削除してくれるので
|影響はないのですが、何故ゾンビプロセスが出来てしまうのか
|理解しておきたくご教授頂きたいと考えています。
原理的にUnixでは全ての子プロセスがゾンビ状態になるものだと思います。
つまり、親からfork()されてexit()したのち、親(権者)にwait()される
まではゾンビなわけですよね。
問題は、ゾンビのまま長時間残る、あるいは放念されて誰も掃除(wait)し
ない放置状態になった場合で、これにより、リソースが不要に圧迫されたり、
ソンビがソケットなどのリソースを握ったままになっている場合に、相手が
切断待ちで終らないとか、サーバが再起動が出来ない、などの問題が発生
します。
1対1で同期式の親子の場合には、fork()してすぐにwait()しますので、
ゾンビはほとんど発生しませんが、DeleGateのように1対Nの親子式
サーバの場合、親が、子供の後片付け(wait)よりも優先すべきと考える
他の処理に関わっている間は、子供はゾンビのままになります。
負荷が高い状況ではは、それが数秒間とかいうことも、あると思います。
(確かに、SIGCHILD割り込みを受けてなるべく早く掃除するというオプ
ションもありますが。最近のDeleGateでなら、子プロセスの終了処理を
専門に行なうスレッドを導入するでしょうね。。。)
もし、そのような短時間でなく、長時間ゾンビの状態になっているものが
あるとしますと、それは何かのバグと思われます。当該のプロセスIDで
DeleGateの動作ログファイル中に何か記録されているようでしたら、
送っていただければと思います。
┌─┐┬┌──┬┐ //\^^ ( e ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_< >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)
|