いくつかの詳細:
「ExtendedStatus On」でmod_statusを有効にしました。/server-statusを表示すると、いくつかの定期的なリクエストが表示されます。このように、「localhost」からのリクエストが240以上あります。
37-0 - 0/0/1 . 0.00 1510 0 0.0 0.00 0.00 127.0.0.2 www.example.gov OPTIONS * HTTP/1.0
38-0 - 0/0/1 . 0.00 1509 0 0.0 0.00 0.00 127.0.0.2 www.example.gov OPTIONS * HTTP/1.0
39-0 - 0/0/3 . 0.00 1482 0 0.0 0.00 0.00 127.0.0.2 www.example.gov OPTIONS * HTTP/1.0
40-0 - 0/0/6 . 0.00 1445 0 0.0 0.00 0.00 127.0.0.2 www.example.gov OPTIONS * HTTP/1.0
次のように、昨日、ローカルホストからの約2417のリクエストも表示されます。
Apr 14 11:16:40 192.168.16.127 httpd[431]: www.example.gov 127.0.0.2 - - [15/Apr/2010:11:16:40 -0700] "OPTIONS * HTTP/1.0" 200 - "-" "Apache (internal dummy connection)"
http://wiki.Apache.org/httpd/InternalDummyConnection のページには、「これらの要求は完全に正常であり、一般に、それらについて心配する必要はありません」とありますが、私はそうではありません確かに。
なぜこれらが230を超えるのですか?これらはアクティブな接続ですか? 「MaxClients 256」を使用していて、これらの接続が230以上ある場合、私のWebサーバーは使用可能な接続が不足する危険なほどに近いようです。また、Apacheはこれらの「内部ダミー接続」のほんの一握りを必要とするようです。
昨夜、原因不明の停止が2回発生しましたが、これらの「内部ダミー接続」により、使用可能な接続が不足したのではないかと思います。
UPDATE 2010/04/16
8時間後です。/server-statusページには、「www.example.govOPTION *」という243行がまだ表示されています。これらの接続はアクティブではないと思います。サーバーはほとんどアイドル状態です(現在処理中のリクエストが1つ、アイドル状態のワーカーが9つ)。 Unixホストには18個のアクティブなhttpdプロセスしかありません。
これらの接続がアクティブでない場合、なぜ/ server-statusに表示されるのですか?初期化されてから数分後に有効期限が切れると思っていました。
まあ、これは驚きの答えがありました。これは、深夜にUFSファイルシステムのスナップショットを作成したときのファイルシステムの問題が原因でした。
これは、FreeBSDUFSのバグが原因のようです。 FreeBSDホストでFreeBSDJailsを使用し、デフォルトのUFSファイルシステムを使用します。 UFSファイルシステムは大きく、1.8TBです。
1泊に1回、「dump(8)」を使用してバックアップを実行します。 dump(8)は、バックアップする前にファイルシステムのスナップショットを作成していましたが、これによりファイルシステムがフリーズしました。ダンプは2TB未満のファイルシステムで動作するはずですが、私たちの場合は失敗しました。 この男にも同じ問題がありました。
(ここで質問セクションから回答セクションに回答を移動しました。ステファン、20100608)
Apacheは、想像とは少し異なる方法で雷鳴の群れを処理します。インバウンドトラフィックのバーストが発生すると、多数の子プロセスが生成されます。さらに必要な場合は、次の間隔で2倍の数の子プロセスが生成され、リクエストを処理するか、maxclientsにヒットするのに十分なプロセスが最終的に確保されます。
これらが表示された場合、それはApacheが単に子をチェックしていることを意味し、Apacheがforkした原因は何であれ、多くのプロセスはおそらくなくなっています。はい、クライアント接続を使用しますが、イベントによって問題が発生した場合は、おそらくなくなっています。
私があなたのログを最初にチェックするのは、イベントの前の302の束です。
あなたのようなものがあったら
<?php include("http://www.oursite.com/header.php");?>
header.phpが欠落していて、
ErrorDocument 404 /404.php
404.phpにheader.phpが含まれている場合、再帰ループが発生し、そのページがヒットすると、Apacheは使用可能なすべての接続をすぐに使用します。
ここでの私の理解は、これらは親から子プロセスへの接続であるため、子が何をしているかを追跡しているのはApacheにすぎないということです。次の点に注意してください。
私の知る限り、ダミー接続が子を「使い果たす」ということはありません。 Apacheは、それらが動作するかどうかをテストするためにそれらを行使するのではなく、その子のステータスをチェックしています。
メモリが機能する場合、これらは、Apacheなどの重いサーバーの前にある軽量プロキシ(Lighttpdなど)によって生成されるテスト接続です。
あなたが刑務所にいるとすると、ホストサーバーはおそらくlighttpdを介して(プライベート)刑務所IPにリクエストをプロキシしていますか?
Apacheポートに接続されているプロセスを見つける必要があります(80だと思います)。
私はFreeBSDシステムを持っていないので、コマンドを確認できますが、少なくともMacでは、これはヒントを与えるはずです。
$ lsof -i
次のように表示されます。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
BadGuy 26655 yvesj 24u IPv4 0x3f32270 0t0 TCP localhost:56696->localhost:56695 (ESTABLISHED)
GoodGuy 26656 yvesj 15u IPv4 0x5b7666c 0t0 TCP localhost:56695 (LISTEN)
GoodGuy 26656 yvesj 16u IPv4 0x72a9e64 0t0 TCP localhost:56695->localhost:56696 (ESTABLISHED)
このことから、PID 26656のプロセスはポート56695でlisteningであり、プロセス26655はそのポートでconnectingであることがわかります。このようにして、誰が悪者であるかを特定できます(接続の反対側を示す3行目(goodguy => badguy)と混同しないでください)。
これをケースに適用すると、システム上の他のどのプロセスがApacheインスタンスへの接続を保持しているかがわかります。
幸運を!
イヴ