httpdの子プロセスがゾンビ化する原因とは?

このQ&Aのポイント
  • httpdの子プロセスがゾンビ化する原因について教えてください。
  • httpdの子プロセスがゾンビ化する原因を具体的に教えてください。
  • httpdの子プロセスがゾンビ化する原因について、一般的な事例を教えてください。
回答を見る
  • ベストアンサー

httpdの子プロセスがゾンビ化する原因

httpdは複数の子プロセスを生成しますが、この子プロセスがゾンビプロセス化してしまう ことがあります。 このゾンビ化してしまう原因として考えられるものを教えて下さい。 『何らかの理由で子プロセスが停止せずに親プロセスが停止した』等、あいまいな答えでも 構いません。もちろん具体的であれば、とても助かりますが…。 思いつく限りいくつでも構いませんので、教えて下さい。 ちなみに、私が使用しているマシンで上記現象が発生している訳ではなく、一般的な事例として 子プロセスのゾンビ化の原因になり得る事象を知りたいと思っていますので、構成情報などは あまり気にせずに答えて頂けると幸いです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

ゾンビプロセス一般について書きます。 ゾンビプロセスとは、プロセスの実体は無いが、プロセステーブル(カーネルがプロセスを管理してる台帳)に エントリーがある状態を指します。 名簿に名前があるけど、本人は居なくなっちゃってる、と。 あるプロセスが終了したときには、必ず一瞬でもこの状態になります。 通常は、プロセスが終了したというシグナルが親プロセスに通知され、親プロセスが後始末を してあげて、めでたくゾンビ状態ではなくなるのです。 もし、親がシグナルを受けたときに適切な処理を行っていなければ、親プロセスが終了するか システムが再起動するまで、ゾンビ状態のままです。 > このゾンビ化してしまう原因として考えられるものを教えて下さい。 子プロセスからのシグナルを受けたときの処理がまずい、のが原因です。

tomo_t_21
質問者

お礼

自力で調べた中にもシグナルについて触れてある資料はあったのですが、いま一つ頭の中で 整理しきれていなかったんです。 この回答を読んで、ようやくはっきりしました。ありがとうございました。 ところで、 > もし、親がシグナルを受けたときに適切な処理を行っていなければ、親プロセスが終了するか > システムが再起動するまで、ゾンビ状態のままです。 とのことですが、親プロセスを終了させれば、ゾンビとなった子プロセスは必ず全て 終了されるものなのでしょうか? もし宜しければ教えて下さい。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> とのことですが、親プロセスを終了させれば、ゾンビとなった子プロセスは必ず全て > 終了されるものなのでしょうか? 私は、そのように理解していますが、これは確約されたことではなく、その unix の実装(と、障害)次第、となります。 また、setsid() を使ってプロセスグループを親と別にしてしまったプロセスが、もしも Zombie に なった場合(まず、ならない、と思いますが)には、親プロセスの終了は意味が無い(と思う)。 私も、知識の整理をかねて Web をうろうろしていたら、Solaris9 には preap なるコマンドがあって、 お掃除をしてくれそう。 # 収穫、収穫 :-)

参考URL:
http://docs.sun.com/db/doc/816-0210/6m6nb7mi1?l=ja&q=preap&a=view
tomo_t_21
質問者

お礼

確かに、仮にプロセスグループが異なっているとしたら、親プロセスの停止は子プロセスに 関係ありませんね。 具体的に事例を提示して頂き、とても判りやすかったです。 私の使用している Solaris8 では、残念ながら preap コマンドはまだ実装されていないようですが、 今後の参考にさせて頂きます。 ありがとうございました。

関連するQ&A

  • perlでゾンビプロセスが発生

    お世話になります。 サーバーの変更後に、 それまで使っていたCGIでゾンビプロセスが発生するようになってしまいました。 以前のサーバーはFreeBSDでそのような事がなかったのですが、 新しいサーバーCentOS5になってから発生するようになってしまったのですが どのような原因が考えらますでしょうか。 perlやSSIを使った時にだけ発生してしまいます。 色々しらべてはみたのですが、 mod_cgid.so SSIではこれを無効にすればよいと言うのを見かけまして apache2のhttpd.confを見てみたのですが LoadModule cgi_module modules/mod_cgi.so のみで 存在していませんでした。 同じプログラムでサーバー変更前はゾンビプロセスは全く発生しなかったのですが、 変更後に今まで大丈夫だったすべてのCGI(perl)プログラムで ゾンビプロセスが発生するようになってしまいました。 ゾンビプロセス自体は、発生後に消える状態ではあります。 これだけの情報では予測もつかないと思いますが、 もし何かこれが原因では・・・と言うのがございましたらご教授いただけますと幸いです。 お手数をおかけしますが、何卒よろしくお願い致します。

    • ベストアンサー
    • Perl
  • httpdのプロセスについて

    現在、mysqlのデータベースを利用して、サイトを作っています。 しかし、夜間は特にサーバーが重くアクセスしにくい状況が続いております。 プロセスを確認するとhttpdのプロセスが大量に発生しておりました。 つまりプロセスが終了してないんだと・・・。timeoutは20に設定しているのに・・・。 しかし、メモリ、load averagesもかなり低いままでサーバー自体にはかなりの余裕があるようです。 このような場合は、どこか他にも設定の問題があるのでしょうか? load averages等が上がっていれば対応が出来るのですが、サーバー自体には負荷がかかっていないようなので、回線が細いとかの問題なのかなぁとは思ったりもしております。 どなたか今回の現象から考えられる原因をご教授願えないでしょうか? どうぞよろしくお願いいたします。

  • forkで作れる子プロセス数が限られている

    for($i=0;$i<1000;$i++) { if($p=fork) { next; } elsif(defined($p)) { sleep 10000; exit; } else { print("$i\n"); <STDIN>; } } 数十個で子プロセスが生成されなくなります メモリは十分あまってます デスクトップヒープ領域が足りなくなったわけじゃなさそうです どうすればメモリが足りる限り子プロセスを生成できるでしょうか? windows xp avtive perl 5.8.7です。

    • ベストアンサー
    • Perl
  • httpdのプロセスが徐々に増大し、数日でダウンするのですが

    FreeBSD5.5+Apache2.0.61+PHP5.1.8+MySQL4.1.22にてWEBサービスを稼動させています。 HPへのアクセスはそれほど多くないのですが、httpdのプロセス数がゆっくりとしたペースで徐々に増加し、数日でApacheが応答しなくなるという現象に悩んでおります。 47562 ?? S 0:10.61 /usr/local/sbin/httpd -k start 47585 ?? S 0:12.06 /usr/local/sbin/httpd -k start 47586 ?? S 0:09.33 /usr/local/sbin/httpd -k start . . このようなプロセスが増えていき、MaxClientを超えるあたりで応答しなくなります。 Server-statusで確認すると、どうやら、Scoreboard Key が W(Sending Reply)のままキープされて、残ってしまっているプロセスがあるような気がします。 31 requests currently being processed, 9 idle workers WKKWWKWWKWKKKWKKK_WWW_KWWK__KW_K_W__.WKW._...................... ................................................................ マニュアル等を参照しながらhttpd.confの設定を色々といじりましたが、全く変化がありません。以下、設定の内容です。 Timeout 60(300に変えて変化なし) KeepAlive On(Offに変えて変化なし) MaxKeepAliveRequests 300 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 10 MinSpareServers 10 MaxSpareServers 20 MaxClients 200(600に変えて変化なし) MaxRequestsPerChild 4000(0に変えて変化なし) </IfModule> CPU稼働率も10%いかない程度ですし、メモリのSWAPも起きていないので、高負荷によるダウンではないと考えております。 私としては、開放されないプロセスをなんらかの方法で検出し、プロセスを停止させればよいのではないかと考えていますが、具体的にどうやったらそれが実現できるのか、方法が分かりません。 どなたかご存知の方がいらっしゃればお教えください。 また、これ以外で良い方法をご存知であればぜひお願いいたします。 どうぞ宜しくお願いいたします。

  • IISワーカープロセスが原因でCPUが100%に

    ASP.NETを用いたWebサイトをIIS上で運用した際、開発したアプリケーションが少しでも動いた後にアプリケーションを停止せずサイトを停止すると、ワーカープロセスが原因でCPUが100%となります。 CPUが100%の状態のまま放置してもCPUの負荷が無くなりません。(アプリケーションプールを停止させることによってCPUの負荷が無くなります。) この事象に関してネットで原因を調査した結果、明確な解決方法が見当たらずこちらに質問させていただく次第でございます。IISの設定に関して詳しい方がおられましたら、この事象の原因と考えられる要素などをご教授下さい。 動作環境 Windows2008 R2 IIS7.5 .NET FrameWork4.5 開発環境 VisualStudio2012 ASP.NET(.NET FrameWork4.0) FORMSで開発 Oracle ODP

  • プロセス間通信方法について

    複数のマシン(Solaris8)からの情報を1台のマシン(Solaris8)で収集する プログラムを作成したいのですが、rshではセキュリティの関係上使用出来ません。 そこでプロセス間通信を利用したいと考えております。 まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから パラレルにキックをかけて情報収集が出来ないものかお教え下さい。 名前は知っているのですが、方法がわかりません。 この様にすれば可能ですよとか、事例紹介ページ、規正の製品が有ればお教え下 さい。 よろしくお願い致します。

  • CGI経由で起動したプロセスが停止してしまう

    CGIからある処理プロセスを実行させているのですが、このプロセスを長時間実行させたままにしておくと停止してしまいます。 (このプロセスはあるファイルの状態を監視しているので、停止の指示をしない限りずっと動かしっぱなしにしておきたいのですが・・・) このプロセス自体がおかしな動きをしているようには見えないのですが、何が原因で停止してしまうのか、またどうすれば停止しないようになるのか教えていただけないでしょうか? OSはRedHat Linux 5.1です。

    • 締切済み
    • CGI
  • Apacheを複数のhttpd.confを用いてる場合の再起動

    Apacheを複数のhttpd.confファイルを用いて運用している場合、 個々のhttpd.confを指定してのApache再起動は可能なのでしょうか? 試しに、httpd_1.confとhttpd_2.confを用いて実施してみましたけど、 エラーになってしまいました。 手順を踏まえての詳細を以下に示します。 1./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_1.conf コマンドでApacheを起動。 2./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_2.conf コマンドでApacheを起動。 3.その後Apacheを停止したらプロセスが残ってしまいました。

  • 親子プロセス間でのデータの受け渡しについて

    子プロセスを複数生成して、それぞれの子プロセスからデータを渡すにはどうしたらよいのでしょう? また、子プロセスでは親プロセスの値を参照できるのでしょうか? char str[] = "hoge"; int dec[10]; dec[0] = 0; . . . dec[9] = 0; for(i = 0; i < 10; i++) { if((gid = fork()) == 0) { printf("%s\n", str);/* 危険でないか? */ dec[i] = i;/* 親プロセスで有効になるか */ exit(EXIT_SUCCESS); } else if(gid == -1) { perror("fork"); exit(EXIT_FAILURE); } } また、もしこのコードが不正であればよい方法をご教授お願いします。

  • タスクマネージャのプロセス内にあるSystemの悪影響。

    現在ものすごく困っています。 その理由というのが、以下のようなことです。 ・IEおよびFirefox使用時、「一瞬だけフリーズ」が幾度と無く続く。 フリーズしている瞬間、どのようなプロセスが動いているか見てみたところ、 System(もちろんSystem Idle Processではありません。)が20%~30%ほど占有しています。 この現象は、Windowsインストール直後には見られず、数日後から突然始まります。 また、LANを組んでいますが、ほかのPC(全てWin2K)では同じ現象は見られません。 これに伴い、FirefoxやIEの再インストール、スパイウェアのチェック、ウイルスチェックも行いましたが、特に効果はありません。 Windowsを再インストールすれば解決するようですが、この現象は現時点で2度目であり、再発するようなので意味がありません。 自分で尽くせる手が尽きましたので、どなたかご教唆願います。 今の構成で原因になりそうなパーツを書いておきます。 OS:WindowsXP MCE2005 CPU:ATHLON64X2 3800+ MOTHER:ECS KA3-MVP(Realtek-オンボードLAN) セキュリティ:NortonIS2004