サーバーリソースに問題がないにもかかわらず、サイトの応答が遅い理由を理解しようと頭を悩ませた後、Apacheのステータスを確認したところ、次のことがわかりました。
78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers
私のApacheは文字通り接続でいっぱいになっているようです。私のサイトにアクセスしようとする人は、Apacheが再び解放されるまで「待機リスト」に入れられます。
2つのオプションがあるようです。
A)最大接続数の制限を256より大きくします。ただし、 この記事 によると、それほど簡単ではありません。
デフォルトでは、MaxClientsパラメータには256のハード制限がコンパイルされています。ただし、これはApacheを再コンパイルすることで変更できます。一部のディストリビューションまたはホスティング会社では、大きな負荷に対処するために、この制限を512または1024などの非常に高い値に引き上げています。
B)時間がかかりすぎるスクリプトを見つけます。ほとんどのApacheプロセスが表示された後、再び表示されなくなるため、これは私にはかなりトリッキーに思えます。また、私のサイトPHPスクリプトはかなり適切に最適化されています...そして、サーバーリソースは正常です:
Server load 2.69 (8 CPUs)
Memory Used 25.33% (2,039,108 of 8,048,804)
Swap Used 1.32% (54,156 of 4,095,992)
どのオプションを選択した場合(どちらかを選択した場合)、どのようにすればよいですか?
編集
詳細:サーバーバージョン:Apache/2.2.23(Unix)mod_ssl/2.2.23 OpenSSL/1.0.0-fips DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
HTTP設定: http://Pastebin.com/yBeLt6mP
Parital Requestサンプル: http://Pastebin.com/vzUVDMPR
ペーストビンが奇妙に表示される場合は、テキストの折り返しを切り替えます。
その記事は不正確です。 MaxClients
は、prefork MPM(問題の説明に基づいて現在使用していると私が想定しているもの)を使用している場合、256を超える可能性があります。 ドキュメント から:
スレッド化されていないサーバー(つまり、prefork)の場合、
MaxClients
は、リクエストを処理するために起動される子プロセスの最大数に変換されます。デフォルト値は256です。増やすには、ServerLimit
も増やす必要があります。
ServerLimit
は、ハードコンパイルされた制限があるものですが、サーバーが他のボトルネックに陥ることなく到達する必要があるところをはるかに超えています。 ドキュメント :
サーバーにコンパイルされた
ServerLimit 20000
のハード制限があります(prefork MPM 200000の場合)。これは、タイプミスによる厄介な影響を回避するためのものです。
したがって、クライアントの制限を512などに引き上げたい場合は、次のようにします。
MaxClients 512
ServerLimit 512
Prefork以外のMPMの方がスケールに適しているため、使用しているMPMも確認する必要があります。詳細は here を参照してください。