web-dev-qa-db-ja.com

Apacheが一晩で遅くなるのはなぜですか?

専門家のご挨拶、

専用の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

6
jedihawk

freeの出力に基づいて、Apacheプロセスがスワップに大きく埋もれているのではないかと強く思います。 sar -W 1 0の出力は、この仮説を確認(または反論)します(マシンの動作が遅いときに実行します)。

Apacheプロセスがすべて実際にリクエストを処理しているわけではない場合(mod_statusで示されているように)、(MaxSpareServersを使用して)「スペア」の子の数を調整して、より早く刈り取られるようにする必要があります(したがって、RAMの消費を回避します)。リクエストの負荷を処理するために実行している子の数が本当に必要な場合は、さらに多くのRAM(別の1GBをまっすぐに使用します; RAMは安価ですが、診断時間はそうではありません)。

7
womble

すべてのメモリを消費するプロセスは何ですか? Apacheを再起動する前にiostat/vmstatを試してください。I/ Oの問題である可能性があります。

傾向の監視には、munin/colectdを使用することをお勧めします(これらには非常に便利なApache(特に)プラグインもあります)。

3
Raven007