7

我通常在我的沙盒 appid 上全职运行 appstats。但是,我有一个复杂的操作(基本上是重建股票数据库)导致 appstats 炸毁我的实例,抛出 OutOfMemoryErrors。即使使用更大的实例大小,它仍然会失败。Appstats 只是想要太多的内存。

我不需要此请求的 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

好问题。对于 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 回答
1

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>
于 2012-05-15T22:49:05.167 回答