Newsgroups: mail-lists.delegate-ja
[DeleGate-Ja] RE: [DeleGate-Ja] Delegate 子プ ロセスがゾンビになる原因について
佐藤様
お世話になります。FILDG 北薗です。
ご回答ありがとうございます。
Unix、Linuxではゾンビプロセスは必ずできるものなのですね。
大変勉強になりました。
長時間ゾンビがいるわけではなく、waitシステムコール待ちで
一瞬存在し、監視タイミングとバッティングして検知されている
だけですので、監視ソフト側で精度をあげる方法を実装したいと思います。
(長時間ゾンビは監視で検知し、wait待ちのゾンビは検知しないようにしたいと思います)
またご相談させていただくかもしれませんが何卒宜しくお願い致します。
以上、宜しくお願いいたします。
-----Original Message-----
From: Yutaka Sato [mailto:ysato@delegate.org]
Sent: Tuesday, March 02, 2010 4:33 PM
To: feedback-ja@delegate.org
Cc: kitazono.to@mail.mazda.co.jp; praaqbrv6-qprr6uexcja6.ml@delegate.org
Subject: Re: [DeleGate-Ja] Delegate 子プロセスがゾンビになる原因について
In message <_A392@delegate-ja.ML_> on 03/01/10(21:10:43)
you necss@北薗 <praaqbrv6-qprr6uexcja6.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/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)
|