Apache2 は正常だが遅い

Apache2 は正常だが遅い

私の Apache ステータスは次のようになります。

201 requests/sec - 98.8 kB/second - 504 B/request
85 requests currently being processed, 345 idle workers
_____CCW_C_____C__C__C_R____C_WC_________C__C____CW__C__CCC_____
__C____W______C___C___CW__C_C______C__W_C__C_____CCC____C______R
CC_C_______C___C____C______________C______C__C________________C_
___________________C______________________C_______C___C_____C___
CC____C__C___R_____C_C_CC__________C___C___________R____C_C_C___
______C______W_W__W___C____________________C__WCC__R__R_C_______
R__RC________________________C___R____W__C____..................
....................................................

4 コア マシン上のサーバー負荷は平均 2 です。

IO 使用率は 10 ~ 15% で、70% を超えることはあまりありません。

マシンにはほぼ 4 GB の空き容量があり、スワップは 0 個使用されています。

マシン上のサイトは PHP サイトです。すべての PHP コードは最適化されており、アクセスされるとほとんどの場合高速になりますが、リクエストがスタックすることがあります。スタックとは、少なくとも 10 秒間応答がないことを意味します。PHP コードをデバッグしましたが、非常に最適化されており高速です。次のリクエストをテストすることに決めるまで、多くの時間を費やしました。

<html><body>test</body></html>

test.html ページ。

この静的リソースも、PHP ページが「スタック」するのと同じように「スタック」します。

システムの健全性とそれが静的ファイルであるという事実を考慮すると、それはどのように可能でしょうか?

ネットワークをテストしましたが、サイト監視で PHP が「遅い」と表示される場合、HTML テスト ファイルの読み込みにも 10 秒以上 (はるかに長い) かかります。

time lynx -dump http://127.0.0.1/test.html

私たちはこの問題を解決しようと必死ですが、どうも取り組むことができないようです。

答え1

Apache のファイル ハンドルが不足している可能性があります。許可されているファイル ハンドルの数はいくつですか? デフォルトの 1024 はすぐにボトルネックになる可能性があります。Linux では、ファイルの制限を上げます/etc/security/limits.conf

停止中にディスク アクティビティが大量に発生していますか? Apache アクセス ログやその他のログを非常に詳細に有効にしている場合は、最新の変更をコミットしているファイル システムが原因である可能性があります。Apache に何らかの影響を与えることはないはずですが、わかりません。

/proc/sys/kernel/random/entropy_avail念のため、停止中にを確認してください。 たとえば、 で確認できますwatch -n1 'cat /proc/sys/kernel/random/entropy_avail'。 と表示されている場合0、カーネルのエントロピーが不足しており、エントロピーがさらに利用可能になるまで Apache がブロックされます。

その場合は、実際のエントロピーが利用できない状況で、/dev/urandom から /dev/random に半乱数を投入するデーモンをインストールしrng-toolsて実行することができます。rngd

答え2

内部を詳しく調べたことはありませんが、私の経験と聞いた話によると、PHP が埋め込みモジュール ( libphp5.so) を使用して Apache 上で実行されている場合、PHP コードが実行されていない場合でも、Apache はリクエストごとに PHP (およびオプションで共有モジュール) をメモリにロードします。

使用を検討するnginxApacheの前にリバースプロキシとして。nginxは静的リソースの提供が非常に高速で、正しく設定すれば、忙しいWebサーバーの負荷を大幅に軽減できます。ボーナスポイントとして、PHPをnginx内でFastCGI経由で実行するように設定してください。この記事理由をいくつか見つけてみましょう。これは本当に素晴らしい方法です。先週、Ubuntu 10.04、nginx、spawn-fcgi、php-cgi で新しい Web サーバーをセットアップしましたが、ほとんど時間がかかりませんでした。ちなみに、PHP 5.3 は Ubuntu 10.04 にバンドルされています。

関連情報