トラフィックの多いWebサイトがあり、ピーク時には_1000
_の同時ユーザーがいて、少なくとも_100
_のユーザーが同時にいます。平均して、1日に_40,000
_から_100,000
_の訪問があります。問題は、ロードが非常に遅いことです(今回は災害時間 :)と名付けました)。そのとき、Firefox
を使用してWebサイトをロードしようとすると、_waiting...
_(世界中の多くのプロバイダーで試してみました)
サーバーを災害回監視します。_CPU load
_、_Memory Usage
_は正常です。また、MySQL
の遅いクエリログは、_1 sec
_までのクエリを実行しません。 Apache
にエラーはありません。 iotop
には、この災害の原因となるものは何も表示されません。
災害時とピーク時の関係がないのはとても興味深いです。災害は_300
_同時ユーザーと別の時間に発生することがあります。私はそれらの間の関係を見つけることができません。
災害時にパケットを追跡するにはどうすればよいですか?これを知りたいdisasterは、データセンターの障害(アップストリームやファイアウォールなど)またはサーバーの障害(Apache
構成、Webアプリケーション、または私が知らないその他のものなど)です。知っている)。
追加のデータについては、コメントを追加するだけです。次に、質問を編集して、回答する必要のあるデータを提供します。
同時ユーザー/訪問の数は、システムの容量/パフォーマンスとは関係ありません。すべては、同時接続とそれらの要求が行っていることです。
サーバーログに要求応答時間を追加することから始めます。これらが問題を反映していない場合は、ネットワーク上で問題が発生している可能性があります。質問でウェブサーバーのログを参照していないことに気付きました-チェックしましたか?
トラフィック量が多いと考えており、質問はサーバーが1つしかないことを示しています。どうして? (複数のサーバーは、負荷分散などのこの特定の問題を追加しますが、診断の多くも簡素化しますが、パフォーマンスと可用性の面で問題はありません)。
接続数の追跡およびそれらの状態は、問題の診断に不可欠なデータも提供します。
災害時にパケットを追跡するにはどうすればよいですか?
パケットキャプチャプログラムを使用すると、これはクライアントからサーバーまでどこでも実行できます。私はwiresharkを使用しています(Linux、MSWindowsなどで利用可能)
サーバーが使用しているバージョン/ MPMと、サーバーが実行されているOSについて言及しておけば便利です。
Linuxを使用している場合は、tcpdump
を使用できます。例:
$ tcpdump dst port 80
しかし、それはあまり役に立たないと思います。私はできるだけ多くの変数を排除しようとします。私の最初の考えは、それがネットワークの問題かもしれないということです。
次のように、応答時間を含むApacheログを作成してみてください。
LogFormat "\"%{%Y-%m-%d %H:%M:%S}t\" %V %m \"%U\" \"%q\" %{Content-Type}o %s %B %O %D" responsetime
CustomLog "/var/log/Apache2/responsetime.log" responsetime
次に、同じスイッチ上のマシン/サーバーからWebサーバーをヒットしてみてください。
それが正常と思われる場合は、time wget http://localhost/index.html -q --output-document=/dev/null
のようなものを使用して同じボックスでそれを実行してみてください。