2016-05-18 3 views
9

私は自分のアプリケーションに対して負荷テストを実行しました。私は、2つの同じ要求(3秒対30秒)の待ち時間の非常に大きな変動に気づいた。私はトレースに掘ったとき、私は、次を発見した。ここでApp EngineリクエストでUntraced Timeの変動が大きくなる原因は何ですか?

|      | Traced (ms) | Untraced (ms) | 
|----------------------+-------------+---------------| 
| High-latency Request |   193 |   29948 | 
| Low-latency Request |   305 |   2934 | 

は、トレースのスクリーンショットです:

全体的に低いレイテンシー

Low-latency Request

高い全体的な待ち時間

High-latency Request

ランタイムパフォーマンスに10対1の違いはありません。

私は負荷の高いこれらの高レイテンシ要求しか見ません。私のコード内の何かがこの変動を説明することができますか?

+0

この問題は引き続き表示されますか?あなたはそれが同じコードパスだと確信していますか?問題のコードは何ですか? –

答えて

1

私の経験では、これらの異常に高い待ち時間は、新しいインスタンスの起動によって引き起こされます。 https://groups.google.com/d/msg/google-appengine/MBveo1KSTyY/mkYdyCmfAgAJ

2つのことを行うことができます:

  1. それはあなたのアプリケーションの全体のサイズを減らすことによって、起動するインスタンスにかかる時間を短縮(コード、同様の問題についてですAppEngineのGoogleグループでの議論がありましたライブラリ、アセット)と遅延初期化を頻繁に使用します。
  2. アイドルインスタンスが1つ(または2つ)あるため、常にトラフィックピーク時にインスタンスが起動するのを待つ必要はありません。

希望に役立ちます。私の場合、より高いインスタンスクラスを使用すると、すでに多くの助けになりました!

+0

IMHO問題のリクエストに該当する場合、トレースは〜30秒のタイムラインの終わりに向かってRPC呼び出しが「絞られた」ことをすべての呼び出しが行われるように見せます**新しいインスタンスが起動した後インスタンスの起動によって影響を受けたものには、その旨の情報ログメッセージが含まれているため、要求ログからは明らかです)。しかし、トレースRPC呼び出しの流通形状は、低レイテンシの場合と非常に似ています。つまり、要求処理がちょっと遅いです... –

0

私もこの問題を抱えていましたが、Googleではmax_concurrent_requestsを減らすことを提案しています。当時の仮説は、CPUが抑制されたということでした。それを減らした後、待ち時間は一般的に良くなった。私はアプリケーションがそのCPUを多用しているとは思っていなかったので、何が起こっているのかまだ分かりませんでした。残念なことに、正確にCPUを使用している部分を正確にピンポイントするためにGAEでCPUをプロファイリングするツールはありません

関連する問題