web-dev-qa-db-ja.com

HTTP応答時間プロファイリング

Nginxリバースプロキシがあります。サーバーは、1秒あたり600〜700の要求をほぼ処理しています。私はこれを出力しているMuninHTTPロードタイムプラグインを持っています:

http://monitor.wingify.com/munin/visualwebsiteoptimizer.com/lb1.visualwebsiteoptimizer.com-http_loadtime.html

さて、問題はグラフにいくつかのスパイクが見られることです。予想される応答時間は常に200ミリ秒未満である必要があります。私はsyslogとメッセージを監視していますが、これの実際の原因を理解することができません。このnginxサーバーにインストール/埋め込みして、さまざまなものにかかった時間の内訳とスパイクの正確な原因に関する詳細なレポート/ログを取得できる、優れたHTTP応答時間プロファイリングシステムがあるかどうか疑問に思いました。

プロファイリングシステムは、ボトルネックを理解し、レイテンシをさらに最適化する方法も理解するのに役立ちます。

現在最も重要なのは、HTTPロード時間グラフのスパイクの原因を調査し(同様のパターンが外部モニターによって報告されます-Pingdom)、一貫した応答時間を取得するように修正することです。

ありがとう

5
Sparsh Gupta

うわー!ロード時間をどのように測定していますか?私の知る限り、nginxはリクエストの応答時間($ request_time)のみを報告しますが、これはまったく異なるものです。

数か月間見栄えがよくありませんでしたが、前回チェックしたとき、応答時間を分析するために利用できるものはほとんどありませんでした。 PastMon 有望に見えます。そして、Client Vantage(かなり高価)のような商用ツールがあります。

自分で作成することになりました-しきい値を超えるすべてのヒットを報告する単純なawkスクリプトを作成するのはそれほど難しいことではありません-しかし、戻ってURLが残りの部分でどのように動作するかを確認する必要があることを忘れないでください時間。例えば.

# looking for URLs matching 'example.com/interesting' 
# with URL in $6 and $request_time in $8

BEGIN {}
$6==/example.com\/interesting/ {
  if ( $8>0.3) {
     n[$6]+=1;       # no of hits by URL
     t[$6]+=$8;      # sum of times by url
     s[$6]+=$8 * $8; # sum of sq of times by url
     if (m[$6]<$8) m[$6]=$8; # max time for url
  }
}
END {
   print "url, n, avg, stddev, max";
   for (x in n) {
     print x ", " n[x] ", " t[x]/n[x] ", " sqrt(s[x]-t[x]*t[x])/(n[x]-1) ", " m[x]; 
   }
}

プロキシで応答時間を測定している場合は、ネットワークを介してリクエストを配信するのにかかる時間も測定しています。つまり、アプリケーションは一貫して動作している可能性がありますが、スパイクはインターネット/クライアントの変更によって発生します。アプリケーションが実際に何をしているのかを知りたい場合は、Webサーバーのログを調べる必要があります。

6
symcbean