問題タブ [appstats]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - GoogleAppEngineの奇妙な遅延
コードを大幅に改善し、すべてのAPIが非常に高速に実行されるようになりました。また、memcacheも追加し、ヒット率が高くなっています。しかし、意味のない遅延が発生することがあります。
ここに最も重要なappstatsスクリーンショットを添付しました。90ミリ秒のRPCを実行するのに合計20秒以上。どうしてそれは可能ですか?これらの遅延の原因をどこで見つける必要がありますか?
RPC間で何が起こっているのか理解できず、より多くの情報を取得するために他に何ができるかわからないため、私は本当に行き詰まっています。
考えてみてください。各HTTP呼び出しは同じGAEインスタンスによって処理されますよね?私のインスタンスはウォームアップに時間がかかったので..しかし、それは関連しているとは思わない
ところで:私はJavaでコーディングしています。
java - Google App Engine Java で Appstats のメモリ使用量を減らす方法
これは、質問Java Appengine APPSTATS cause java out of memory error に関連しています。
Appstats は 128MB のインスタンスで java.lang.OutOfMemoryError を引き起こすようで、ログの量を減らす方法があるかどうか疑問に思っています。スタック トレースから一部のパッケージ名をフィルタリングする方法はありますか?
ゲー API:
私のアプリケーションAPI:
無関係:
これは、おそらくスタックトレースによる OutOfMemoryError のスタック トレースです。
Google エンジニア向けに、これらのエラーへのリンクを示します
java - App Engine 本番環境で実行中の一時停止をデバッグするにはどうすればよいですか?
Google App Engine/Java アプリケーションの Appstats グラフを見ると、RPC 間に説明のつかない時間のギャップが見られることがあります。添付のスクリーンショットでは、for ループからの MemcacheService.get への 2 つの呼び出しの間に約 2 秒のギャップがあります。コードをローカルで実行すると、この動作は発生しません。コードが App Engine クラウドで実行されている場合、このような異常の原因を調査するにはどうすればよいですか?
どうやらSOは画像を投稿させてくれないので、ここにグラフへのリンクがあります:http://i.imgur.com/bbCXr.jpg
google-app-engine - NDBでGAEのAppStatsを使用すると、どのクエリが実行されているかをどのように確認できますか?
私はRPC呼び出しを見ていますが、スタックはすべてタスクレットとndbです。これにより、実行されているクエリを特定することが困難になっています。使用する必要のあるappstats構成設定はありますか?
助けてくれてありがとう。
google-app-engine - appstatsGrandTotalとapachebenchの違いを調整する
私はいくつかの呼び出しを調べるためにappstatsを使用しています。memcache呼び出しを行い、結果を返す単純なビューがあります。Appstatsによると、合計時間(総計)は約15ミリ秒です。しかし、私がブラウザで観察するのは、242ms程度です。実際、apacheベンチを使用しても同じ結果が得られます。別のネットワーク(ec2インスタンスを使用)を試して、ラウンドトリップ時間が異なるかどうかを確認しましたが、ほぼ同じ結果が得られました。サーバーへのpingには約13または14ミリ秒かかります。
私は間違いなくここで何かが欠けています。私が説明できない約180〜200ミリ秒の遅延があります。アプリエンジンとappstatsの経験に基づいて、私は誰かが私が欠けているものに私の目を開くのを手伝ってくれることを望んでいます。
興味があればいくつかの環境の詳細...python2.7; テストでwebapp2とFlaskの両方を使用しました。私のapacheベンチテストはすべてシングルスレッドで100回ヒットしています。
洞察をありがとう。
python - get_multi を呼び出すときにアプリケーションが datastore_v3.next() を呼び出さないようにするにはどうすればよいですか?
20 件の結果を取得する keys_only クエリを実行しています。
次に、 activityIndex オブジェクトの親を取得します。
キーごとにオブジェクトのバッチを取得していたので、これは速いと思いました。ただし、appstats docsdatastore_v3.Next
によると、クエリは call のようで、これは「悪い」ものであり、実行時間のかなりの部分を占めています。
不要な Next 呼び出しを避けることで、アプリの速度が向上する可能性があります。
上記のクエリの Appstats (get_multi 呼び出しを使用)
上記のクエリの Appstats ですが、get_multi を呼び出していません (next() が応答するまでの短い時間)。
datastore_v3.next()
を呼び出すときに、呼び出しの実行に時間がかかるのはなぜget_multi()
ですか? get_multi が返す結果の数に依存しますか? get_multi で返されるオブジェクトの一部にはリスト プロパティ (リスト内の最大 10 アイテム) がありますが、これはパフォーマンスに影響しますか?
この問題を回避するには、設計を変更し、タスクレットで必要なエンティティをフェッチする方がよいでしょうか? 他の提案はありますか?
編集:
私がやろうとしていることについてのもう少しの情報: アプリケーションにアクティビティ ストリームがあり、すべてのユーザー アクティビティが表示されます。たとえば、Rob が画像にコメントしたなどです。アクティビティの説明と表示する情報を構築するオブジェクト。これらすべてのオブジェクトのキーを の親として設定しActivityIndex
ました。したがって、上記のクエリから、ndb.get_mult(keys)
Activity、User、および Picture オブジェクトを取得します。キー リストには 50 個以上のキーが含まれている可能性があるため、これが長いdatastore_v3.Next
呼び出しの原因である可能性があります。
java - 以下のコードがトランザクションにラップされている場合、App Engineの請求額が少なくなるのはなぜですか?
appstatsを使用してこれを複数回確認しました。以下のコードがトランザクションにラップされていない場合、JDOは240のコストで2つのデータストア読み取りと1つの書き込み(3 RPC)を実行します。初回だけでなく、毎回同じレコードにアクセスしている場合でも、キャッシュからプルしています。ただし、上記のようにコードをトランザクションでラップすると、コードは4つのRPC(トランザクションの開始、get、put、commit)を作成します。これらのうち、Getのみがデータストアの読み取りとして請求されるため、全体のコストは70になります。
キャッシュからプルしている場合、なぜ読み取りに対してのみ請求するのでしょうか。読み取りではなく、書き込みに対して請求するように思われます。App Engineは、非トランザクションキャッシュ読み取りに対して、データストア読み取りと同じ金額を請求する可能性がありますか?なぜ?
これはコードWITHトランザクションです:
これは、トランザクションのないコードです。
google-app-engine - appstats を webapp2 および GAE の拡張ルーティングで動作させるにはどうすればよいですか?
GAE Python アプリで Appstats を動作させようとしています。私はpython 2.7でwebapp2を使用しています。
appengine_config.py ファイルの作成を含むhttps://developers.google.com/appengine/docs/python/tools/appstats#Setupの指示に従いました。
そして、次の行を app.yaml に追加します。
Appstats を使用したい Python アプリは次のようになります。
( Appstatsimport appengine_config
からのコメントを読んだ後に試してみましたが、1 つの WSGIApplication に対してのみ機能しますが、どちらも機能しません)
私が直面している問題は、appstats コンソールを表示できるが/_ah/stats
、アプリに対して多くのリクエストが行われた後でも何も記録されないことです。
拡張 URL ルートを使用していることと何か関係があるのでしょうか? 私は本当に webapps2 拡張ルーティングを使用したいので、Appstats で問題が発生しないことを願っています。私が間違っていることについて誰かが何か洞察を持っているなら、それは本当に役に立ちます!
事前にたくさんありがとう!
google-app-engine - NDB タスクレットが appstats に表示されない
で装飾されたメソッドの行番号がappstats@ndb.tasklet
にないのはなぜですか?
私たちのアプリでは、関数の同期バージョンと非同期バージョンの両方を含める規則があります。たとえば、次のようになります。
…しかし、appegnine_config.appstats_MAX_STACK
巨大なものに設定して空にした後appengine_config.appstats_RE_STACK_SKIP
でも、appstats のレポートは、最初some_tasklet.get_result()
に呼び出されたときにアプリケーション コードから離れます。
appstats の例を次に示します。
の展開されたスタック フレームは、learn.get_list_of_cards_to_learn()
単純に を返しますself.get_list_of_cards_to_learn_async().get_result()
。これは、一連の他のタスクレットを順番に呼び出すタスクレットです。ただし、これらのタスクレットは appstats には表示されず、ndb
内部のみが表示されます。
ndb
これらのデコレータがどのように正確に実行されているかはわかりませんがpdb
、そのうちの 1 つにトレースを入れてテスト スイートを実行すると、スタック フレームをpdb
タスクレットに入れた行までずっと見ることができるので、 appstats にそれがない理由がわかりません。
一部のリクエストは大量の RPC 呼び出しを引き起こしますが、appstats の最初のタスクレットを過ぎて追跡できないため、アプリのどの部分がそれらを行っているかを特定する方法がわかりません。
微調整が必要なものはありappengine_config
ますか?
google-app-engine - Appstats でどのエンティティがアクセスされているかを確認する方法はありますか?
呼び出しのAppstats トレースを分析する際datastore_v3.Get
に、データストアから取得されているエンティティを把握しておくと非常に役立ちます。これを有効にする非表示の構成フラグはありますか?
に設定appstats_DATASTORE_DETAILS
してみTrue
ましたappengine_config.py
が、違いはないようです。