専門家のご挨拶、
専用のCentOS5.4サーバーで、約12の仮想ホストを使用してApacheを構成します。私はそれらのいくつかをテストし、それぞれが約1秒以内にロードされます。かなり速い。負荷平均は1未満です。問題ありません。私は静的なHTMLサイトを実行しています。1つはWordPress MySQL5.0のブログです...これらは高帯域幅のサイトではありません。このサーバーにストレスを与えるものは何もありません。
翌朝、仕事に取り掛かり、メインサイトをロードします。ロードには10〜20秒かかります。サーバーの負荷平均を確認すると、3前後、場合によっては5までホバリングしており、一度は8で表示され、2を下回ることはありません。この時点で、Apacheを正常にバウンスします。
# apachectl -k graceful
約30分かかりますが、その後はすべて元気になります。すべての仮想ホストは、1秒未満の高速ロードです。負荷平均はすぐに1を下回ります。
/ server-statusをチェックするとき、多くは起こっていません。ネットトラフィックをチェックするとき(vnstat -l
またはvnstat -h
)、多くの帯域幅は使用されていません。両方とも、一日の始まりと終わりで比較可能です。それでも、午前中に確認すると、Apacheは一日中よりもはるかに遅いです。 Apacheの速度を大幅に低下させ、システムリソースをさらに多く消費させるために、一晩で何が起こっているのでしょうか。
# httpd -V
Server version: Apache/2.2.3
# uname -a
Linux myserver.com 2.6.18-92.el5 #1 SMP Tue Jun 10 18:51:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux
# free
total used free shared buffers cached
Mem: 1025576 1017292 8284 0 8208 43160
-/+ buffers/cache: 965924 59652
Swap: 2096472 361012 1735460
毎日Apacheを正常にバウンスするcronジョブを設定できると思いますが、それは手っ取り早い解決策のようです。私はむしろ原因を見つけてそれを修正したいと思います。
更新2009-10-2814:38;平均して5分間にわたって10秒ごとに取得されたサンプル:
$ sar -W 10 30 && date
Linux 2.6.18-92.el5 (myserver.com) 10/28/2009
02:32:36 PM pswpin/s pswpout/s
02:32:46 PM 10.31 30.43
02:32:56 PM 2.30 32.93
02:33:06 PM 21.56 0.00
02:33:16 PM 1.80 0.00
02:33:26 PM 5.69 26.67
02:33:36 PM 0.10 0.00
02:33:46 PM 25.70 7.60
02:33:56 PM 10.61 7.11
02:34:06 PM 4.10 2.60
02:34:16 PM 0.70 0.00
02:34:26 PM 0.00 0.00
02:34:36 PM 0.00 0.00
02:34:46 PM 3.80 0.00
02:34:56 PM 0.00 0.00
02:35:06 PM 0.00 11.01
02:35:16 PM 7.70 30.30
02:35:26 PM 20.32 0.00
02:35:36 PM 1.60 0.00
02:35:46 PM 11.60 0.00
02:35:56 PM 2.50 0.00
02:36:06 PM 0.00 0.00
02:36:16 PM 3.60 0.00
02:36:26 PM 0.00 0.00
02:36:36 PM 0.00 0.00
02:36:46 PM 0.00 0.00
02:36:56 PM 445.20 56.60
02:37:06 PM 0.00 0.00
02:37:16 PM 0.00 0.00
02:37:26 PM 0.00 0.00
02:37:36 PM 0.00 0.00
Average: 19.31 6.84
Wed Oct 28 14:37:36 PDT 2009
不思議なことに、Apacheは今朝遅くはありません。昨日、起動したサーバーの数、スペアサーバーの数、サーバーの最大数などを微調整しました。古い値を取得して比較してみましょう...
/etc/httpd/conf/httpd.confからの元の値:
StartServers 20
MinSpareServers 20
MaxSpareServers 120
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
すべての外観から、問題なく機能しているように見える新しい値:
StartServers 30
MinSpareServers 30
MaxSpareServers 40
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 4000
これらの設定を少し調整し続けると思いますが、今はうまく機能しているようです。
今朝再びSarコマンド:
$ sar -W 10 30 && date
Linux 2.6.18-92.el5 (myserver.com) 10/29/2009
09:31:09 AM pswpin/s pswpout/s
09:31:19 AM 5.80 54.40
09:31:29 AM 62.10 0.00
09:31:39 AM 0.00 0.00
09:31:49 AM 0.00 0.00
09:31:59 AM 0.00 0.00
09:32:09 AM 3.30 0.00
09:32:19 AM 2.70 0.00
09:32:29 AM 0.00 0.00
09:32:39 AM 0.00 0.00
09:32:49 AM 0.00 0.00
09:32:59 AM 3.10 0.00
09:33:09 AM 5.80 0.00
09:33:19 AM 0.00 0.00
09:33:29 AM 0.00 0.00
09:33:39 AM 0.00 0.00
09:33:49 AM 0.00 0.00
09:33:59 AM 0.00 0.00
09:34:09 AM 0.00 0.00
09:34:19 AM 0.00 0.00
09:34:29 AM 0.00 0.00
09:34:39 AM 4.00 0.00
09:34:49 AM 0.10 0.00
09:34:59 AM 0.00 0.00
09:35:09 AM 4.80 0.00
09:35:19 AM 0.00 0.00
09:35:29 AM 291.29 0.00
09:35:39 AM 0.00 0.00
09:35:49 AM 0.80 0.00
09:35:59 AM 0.00 0.00
09:36:09 AM 0.00 0.00
Average: 12.78 1.81
Thu Oct 29 09:36:09 PDT 2009
平均は実際にはもっと低いです!そして、サーバーは昨日より多くのトラフィックを獲得しました。ウォンブル、あなたは正しかったようです!そして今、すべてが再び宇宙でうまくいっています。
ジョン・ガーデニアーズ、いい考えだ! -o [filename]
そのためだけに切り替えます。ヒントをありがとう!
Jeremy Visser、dstat
は本当に甘いツールです!ヒントをありがとう!それはインストールされていませんでした、yum install dstat
。
free
の出力に基づいて、Apacheプロセスがスワップに大きく埋もれているのではないかと強く思います。 sar -W 1 0
の出力は、この仮説を確認(または反論)します(マシンの動作が遅いときに実行します)。
Apacheプロセスがすべて実際にリクエストを処理しているわけではない場合(mod_statusで示されているように)、(MaxSpareServersを使用して)「スペア」の子の数を調整して、より早く刈り取られるようにする必要があります(したがって、RAMの消費を回避します)。リクエストの負荷を処理するために実行している子の数が本当に必要な場合は、さらに多くのRAM(別の1GBをまっすぐに使用します; RAMは安価ですが、診断時間はそうではありません)。
すべてのメモリを消費するプロセスは何ですか? Apacheを再起動する前にiostat/vmstatを試してください。I/ Oの問題である可能性があります。
傾向の監視には、munin/colectdを使用することをお勧めします(これらには非常に便利なApache(特に)プラグインもあります)。