如何在App Engine / Java上暂停appstats以获取单个请求?

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

这个请求我不需要appstats。 理想情况下,我将调用任何ThreadLocal对象负责appstats集合的方法,并告诉它将其拇指旋转几分钟。

我曾考虑过扩展AppstatsFilter来忽略某些URL,但这个有问题的请求作为延迟任务执行,并通过路径识别它有点复杂。

我如何告诉appstats暂停?

以防万一它不明确:上传我的应用程序版本与禁用的appstats,运行我的任务,然后上传与启用appstats的版本是我现在正在做的。 我不想这样做。


我所做的是编写我自己的CustomAppstatsFilter并排除某些网址。

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的发生:如何减少Google App Engine Java上Appstats的内存使用量

<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>
链接地址: http://www.djcxy.com/p/58855.html

上一篇: How can I suspend appstats for a single request on App Engine/Java?

下一篇: Maps bug: Markers shifting all over the place when switching view angles. Fix?