
当社の Web サービスは専用サーバーでホストされています。高負荷時には、サーバーはページではなくタイムアウト エラーを頻繁に返します。1 日のリクエスト数は約 170,000 件です。ただし、サーバーには空きメモリがたっぷりあり、CPU は現時点では負荷がかかっていません。
サーバーの動作がなぜ悪いのか理解できません。
tcpdump ユーティリティを使用して、問題のケースをプロファイルしました。これらは、tcpdump によってトレースされた正常なセッションと異常なセッションです。両方の実験で要求は同じです。正常 - サーバーが応答を返します。異常 - 応答なし、タイムアウト エラー。
これらのデータから、なぜ問題が発生するのかがわかりますか? エラーの原因をさらに突き止めるにはどうすればよいでしょうか?
実際のIPアドレスを123.45.67.890に置き換えました
---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------
---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------
サービスの詳細。
これは天気予報サービスです。Perl で書かれており、MySQL を利用しています。スクリプトはいくつかのモジュール (CPAN および当社独自のもの) を使用します。
コードは比較的シンプルです。スクリプトは別のサーバーから天気をダウンロードし、データ形式を変換して XML 応答を返します。天気は MyISAM DB にキャッシュされます。スクリプト経由で要求できる世界位置データベース (INNODB) もあります。
これらは高負荷期間中に取得されたメトリックです。
平均トラフィック: 2.5MBit/秒
平均パケット数: 3300 パケット/秒
ホスティング会社: SuperbHosting
OS: Ubuntu
サーバーパラメータ: E6300 CONROE 1.86GHZ 2 X 1MB キャッシュ 1066 1GB DDR2 667MHZ
これは私たちが使用するApache設定ファイルへのリンクです http://repkin5.snow.prohosting.com/apache.txt
これは高負荷時のサーバーステータスレポートです http://repkin5.snow.prohosting.com/server-status.htm 120 台のうち実行中の子サーバーは 10 台だけなので、新しいリクエストを処理するのに十分なスペースがあります。
高負荷期間中のトッププログラムスナップショット。
------
top - 13:21:29 up 15 days, 18:36, 1 user, load average: 0.18, 0.19, 0.21
Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.8%us, 1.2%sy, 0.0%ni, 92.8%id, 0.7%wa, 0.0%hi, 3.5%si, 0.0%st
Mem: 1033904k total, 590620k used, 443284k free, 6892k buffers
Swap: 3028212k total, 82556k used, 2945656k free, 64156k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4252 mysql 20 0 162m 48m 3352 S 1 4.8 279:01.27 mysqld
14503 www-data 20 0 43280 14m 3824 S 1 1.4 0:00.16 apache2
14577 www-data 20 0 43012 13m 3500 S 1 1.4 0:00.06 apache2
14401 www-data 20 0 45076 17m 4340 S 0 1.8 0:00.46 apache2
14414 www-data 20 0 45516 18m 4344 S 0 1.8 0:00.47 apache2
14420 www-data 20 0 45624 18m 4372 S 0 1.8 0:00.61 apache2
14421 www-data 20 0 45488 18m 4352 S 0 1.8 0:00.42 apache2
14496 www-data 20 0 44820 17m 4328 S 0 1.7 0:00.18 apache2
14510 www-data 20 0 45216 17m 4300 S 0 1.8 0:00.62 apache2
1 root 20 0 2844 456 404 S 0 0.0 0:05.24 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:00.24 migration/0
4 root 15 -5 0 0 0 S 0 0.0 32:28.85 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.77 watchdog/0
6 root RT -5 0 0 0 S 0 0.0 0:00.15 migration/1
7 root 15 -5 0 0 0 S 0 0.0 0:03.07 ksoftirqd/1
8 root RT -5 0 0 0 S 0 0.0 0:00.63 watchdog/1
-----
答え1
MySQL サーバーは、CPU 時間が高いため、時々負荷がかかっているようです (スクリーンショットではそうではありません)。MySQLSHOW PROCCESSLIST;
プロンプトで発行して、どのクエリが実行されているかを確認してください。
また、サーバーステータスApache のページ。ExtendedStatus On
これにより、その時点でどのページが読み込まれているかに関する情報が得られ、Apache に残っている空き「スロット」の数を確認できます。
Apache mpm-prefork のデフォルトでは、最大で約 250 のプロセスを持つため、同時に 250 のファイル ダウンロードを処理できます。これは、特にアクティブ化されている場合、多くの訪問者がいる場合に多くの問題を引き起こす可能性がありますKeepAlive
。これが問題である場合は、サーバー ステータス ページで確認できます。
答え2
Apacheが応答しない理由は数多くあります。まずは、サーバーステータスを確認します。mod_status有効にして、実行中のプロセスの数と、それらがビジー状態かどうかを確認します。このページ子プロセスに問題があることが判明した場合に試すことができる事項を確認するには、まずここが適しています。
答え3
上のスクリーンショットは、MySQL サーバーがまったく稼働していないことを示しています。(申し訳ありませんが、Emil さん、これをもっと注意深く読むか、top についてもう少し学ぶ必要があります)。
リストされている Apache プロセスは 8 つだけです。
負荷平均は 0.2、CPU アイドル率は 93% です。このマシンは何もせずに待機しています。
投稿されたリンクから構成の半分が欠落していますが、事前にフォークされているようです。
私の最初の推測は、MaxServers が 10 のような奇妙な値に設定されているということです (アプリケーションの内容に応じて、100 ~ 200 の範囲になるはずです)。
また、着信接続の逆引きやmod_identのインストールなどの愚かなこともチェックしたいかもしれません(OK、これらはいつも愚かですが、細心の注意を払って使用する必要があります。
確かに、mod_status をインストールして拡張ステータスを有効にすると、ここで何が起こっているのかがはるかによくわかるようになります。
C.
答え4
サーバーにフラッド ping (ping -f) を試していただけますか? サーバーが SYN パケットに十分な速さで応答していないようなので、ネットワーク接続に関するハードウェアの問題があると思われます。