
現在処理中の(アイドル)リクエストの数を検出する監視システムを構築しています。これを検出するために使用している方法は、http://に接続することです。ローカルホスト/サーバーステータス。
問題は、Apache がこれ以上新しい接続を処理できない場合 (例:最上位に到達した場合)、どのようにして Apache の統計情報を検出できるかということです。Apache は、ローカルホストからの接続の構成をMaxClients
無視できるほど賢いのでしょうか。MaxClients
どのような助けでも大歓迎です。
答え1
私は答えは「ノー」だと信じています。それには 2 つの理由があります (そして 3 つ目の曖昧な理由もあります)。
へのリクエスト
/server-status/
が に耐性があると仮定しますMaxClients
(ただし、クライアント数は増加します)。そうすると、リクエストで Apache を DoS することが非常に簡単になり、正当なリクエストが処理されなくなります( をはるかに超える可能性があるためMaxClients
、実際のリクエストが応答される可能性はまったくありません)。Apache は、開いている接続の数に基づいてクライアント数を決定する可能性があります (1 つの接続では
:80
一度に 1 つのリクエストしか送信できませんが、KeepAlive
再利用できるため、開いている 1 つの TCP 接続は基本的に 1 つのクライアントです)。これは、ヘッダーが読み取られる前にチェックされます (スペースがある場合は、リクエストの処理を委任します。スペースがない場合は、すぐに失敗します)。接続が過負荷になると、
service httpd fullstatus
動作が非常に遅くなったり、まったく動作しなくなったりします :-)
答え2
Apache サーバーとの通信に別のインターフェイスが使用されるように、Apache モジュールを作成する (または mod_status を変更する) 必要がある場合があります。統計を要求して取得するには、POSIX シグナルと共有メモリまたはファイルを使用する必要がある場合があります。