7

私は通常、サンドボックスappidでappstatsをフルタイムで実行します。ただし、appstatsがインスタンスを爆破してOutOfMemoryErrorsをスローする、複雑な操作(基本的には株式データベースの再構築)が1つあります。インスタンスサイズが大きくても、失敗します。AppstatsはRAMが多すぎます。

このリクエストにはappstatsは必要ありません。理想的には、appstatsコレクションを担当するThreadLocalオブジェクトのメソッドを呼び出し、数分間親指をいじるように指示します。

AppstatsFilterを拡張して特定のURLを無視することを検討しましたが、問題のあるリクエストは遅延タスクとして実行され、パスによる識別はやや複雑です。

appstatsに一時停止するように指示するにはどうすればよいですか?

明確でない場合に備えて、appstatsを無効にしたバージョンのアプリをアップロードし、タスクを実行してから、appstatsを有効にしたバージョンをアップロードすることを現在行っています。私はこれをしたくありません。

4

3 に答える 3

2

私がしたことは、独自の CustomAppstatsFilter を作成し、特定の URL を除外することです。

public class CustomAppstatsFilter extends AppstatsFilter {

  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    if (request instanceof HttpServletRequest) {
        String url = ((HttpServletRequest) request).getRequestURL().toString();

        // We do not want these to show up in appstats
        if ((url.contains("appstats"))
                || url.contains("_ah/")
                || url.contains("cron/")
                || url.contains("batch/")) {
            chain.doFilter(request, response);
            return;
        } else {
            super.doFilter(request, response, chain);
        }
    }
  }
}

編集 - これは、ZiglioNZ の素晴らしい回答と組み合わせることができます。

<!-- Appstats filter for profiling application -->
<filter>
    <filter-name>appstats</filter-name>
    <filter-class>my.company.filter.CustomAppstatsFilter</filter-class>
    <init-param>
        <param-name>maxLinesOfStackTrace</param-name>
        <param-value>5</param-value>
    </init-param>
</filter>
<filter-mapping>
    <!-- excludes are in CustomAppstatsFilter -->
    <filter-name>appstats</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
于 2014-02-18T13:07:47.397 に答える
1

ジェフ、これが OutOfMemoryErrors の発生を減らすのに役立つかどうか疑問に思います: How to reduce the memory usage of Appstats on Google App Engine Java

<filter>
  <filter-name>appstats</filter-name>
    <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
    <init-param>
      <param-name>maxLinesOfStackTrace</param-name>
      <param-value>16</param-value>
    </init-param>
</filter>
于 2012-05-15T22:49:05.167 に答える
1

良い質問。Python の場合、答えは簡単です。

from google.appengine.ext.appstats import recording

class ...(webapp.RequestHandler):
  def get(self):
    recording.dont_record()
    ...

Javaにも同様のAPIがあるのではないでしょうか?

別の方法として、Python バージョンには、記録する要求を柔軟に除外する方法があります。Java バージョンでは、web.xml の および エントリを使用して同様のことを達成できると思います。(Java appstats ドキュメントを参照してください。)

于 2012-04-07T04:19:17.700 に答える