6

コードを大幅に改善し、すべてのAPIが非常に高速に実行されるようになりました。また、memcacheも追加し、ヒット率が高くなっています。しかし、意味のない遅延が発生することがあります。

ここに最も重要なappstatsスクリーンショットを添付しました。90ミリ秒のRPCを実行するのに合計20秒以上。どうしてそれは可能ですか?これらの遅延の原因をどこで見つける必要がありますか?

RPC間で何が起こっているのか理解できず、より多くの情報を取得するために他に何ができるかわからないため、私は本当に行き詰まっています。

考えてみてください。各HTTP呼び出しは同じGAEインスタンスによって処理されますよね?私のインスタンスはウォームアップに時間がかかったので..しかし、それは関連しているとは思わない

ところで:私はJavaでコーディングしています。

appstats統計

4

2 に答える 2

2

通常、appstatsの真ん中にある説明されていない「穴」は、実行中のコードです。
Appstatsはすべてのrpcエントリと終了を記録し、記録できない領域は実際に実行されているコードです。

アプリケーションがこれら2つの呼び出しの間にあった時間のログはありますか?

于 2012-04-29T22:14:10.853 に答える
2

巨大な「説明のつかない」レイテンシーは、ほとんどの場合、ウォームアップ要求がリソースを食いつぶすことです。appengineログを調べて、ウォームアップで使用されているapi_msとcpu_msの量を確認します。

appengineコントロールパネルで保留中の最大レイテンシを増やすことで、ウォームアップを回避できます。より高いレイテンシーを許可することは、新しいインスタンスを起動する前にリクエストがより長く待機することを意味します。これにより、各リクエストが少し遅くなる可能性がありますが、大量の読み込みリクエストを回避できます。

ウォームアップリクエストを支援するために、appengine-web.xmlに次のものがあることを確認してください。

<warmup-requests-enabled>true</warmup-requests-enabled>  

これにより、現在のインスタンスがオーバーロードされているときに、appengineディスパッチャーが新しいインスタンスをプリエンプティブに起動します{つまり、リクエストが新しいインスタンスに送られる前にロードを開始します}。

次に、影響を受ける低速サーブレットで、web.xmlにload-on-startupを配置していることを確認してください。

<servlet>
  <servlet-name>my-servlet</servlet-name>
  <servlet-class>com.company.MyServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

load-on-startupは、ウォームアップ要求が終了するとすぐに、優先度の高いサーブレットが常に準備ができていることを保証するだけです。

于 2012-04-29T19:33:19.243 に答える