簡體   English   中英

如何為 App Engine/Java 上的單個請求暫停 appstats?

[英]How can I suspend appstats for a single request on App Engine/Java?

我通常在我的沙盒 appid 上全時運行 appstats。 但是,我有一個復雜的操作(基本上是重建股票數據庫)導致 appstats 炸毀我的實例,拋出 OutOfMemoryErrors。 即使具有更大的實例大小,它仍然會失敗。 Appstats 只是想要太多的 RAM。

我不需要此請求的 appstats。 理想情況下,我將在負責 appstats 收集的任何 ThreadLocal object 上調用一個方法,並告訴它轉動拇指幾分鍾。

我考慮過擴展 AppstatsFilter 以忽略某些 URL,但違規請求作為延遲任務執行並通過路徑識別它有些復雜。

我怎樣才能告訴 appstats 暫停?

以防萬一不清楚:上傳我的應用程序版本並禁用 appstats,運行我的任務,然后上傳啟用 appstats 的版本是我現在正在做的。 我不想這樣做。

我所做的是編寫自己的 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>

好問題。 對於 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 文檔。)

Jeff,我想知道這是否可以幫助您減少 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM