web-dev-qa-db-ja.com

サーバーからの応答時間が長い

トラフィックの多いWebサイトがあり、ピーク時には_1000_の同時ユーザーがいて、少なくとも_100_のユーザーが同時にいます。平均して、1日に_40,000_から_100,000_の訪問があります。問題は、ロードが非常に遅いことです(今回は災害時間 :)と名付けました)。そのとき、Firefoxを使用してWebサイトをロードしようとすると、_waiting..._(世界中の多くのプロバイダーで試してみました)

サーバーを災害回監視します。_CPU load_、_Memory Usage_は正常です。また、MySQLの遅いクエリログは、_1 sec_までのクエリを実行しません。 Apacheにエラーはありません。 iotopには、この災害の原因となるものは何も表示されません。

災害時とピーク時の関係がないのはとても興味深いです。災害は_300_同時ユーザーと別の時間に発生することがあります。私はそれらの間の関係を見つけることができません。

災害時にパケットを追跡するにはどうすればよいですか?これを知りたいdisasterは、データセンターの障害(アップストリームやファイアウォールなど)またはサーバーの障害(Apache構成、Webアプリケーション、または私が知らないその他のものなど)です。知っている)。

追加のデータについては、コメントを追加するだけです。次に、質問を編集して、回答する必要のあるデータを提供します。

4
superuser

同時ユーザー/訪問の数は、システムの容量/パフォーマンスとは関係ありません。すべては、同時接続とそれらの要求が行っていることです。

サーバーログに要求応答時間を追加することから始めます。これらが問題を反映していない場合は、ネットワーク上で問題が発生している可能性があります。質問でウェブサーバーのログを参照していないことに気付きました-チェックしましたか?

トラフィック量が多いと考えており、質問はサーバーが1つしかないことを示しています。どうして? (複数のサーバーは、負荷分散などのこの特定の問題を追加しますが、診断の多くも簡素化しますが、パフォーマンスと可用性の面で問題はありません)。

接続数の追跡およびそれらの状態は、問題の診断に不可欠なデータも提供します。

災害時にパケットを追跡するにはどうすればよいですか?

パケットキャプチャプログラムを使用すると、これはクライアントからサーバーまでどこでも実行できます。私はwiresharkを使用しています(Linux、MSWindowsなどで利用可能)

サーバーが使用しているバージョン/ MPMと、サーバーが実行されているOSについて言及しておけば便利です。

2
symcbean

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のようなものを使用して同じボックスでそれを実行してみてください。

2