首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在App Engine/Java上挂起单个请求的appstats?

如何在App Engine/Java上挂起单个请求的appstats?
EN

Stack Overflow用户
提问于 2012-04-07 11:19:08
回答 3查看 403关注 0票数 7

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

对于此请求,我不需要appstats。理想情况下,我会在负责appstats收集的任何ThreadLocal对象上调用一个方法,并告诉它旋转拇指几分钟。

我曾考虑过扩展AppstatsFilter以忽略某些URL,但是违规的请求作为延迟任务执行,并且通过路径识别它有点复杂。

如何让appstats暂停?

如果不是很清楚:我现在正在做的事情是:上传一个禁用了appstats的应用程序版本,运行我的任务,然后上传一个启用了appstats的版本。我不想这么做。

EN

回答 3

Stack Overflow用户

发布于 2014-02-18 21:07:47

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

代码语言:javascript
复制
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的伟大答案组合。

代码语言:javascript
复制
<!-- 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>
票数 2
EN

Stack Overflow用户

发布于 2012-04-07 12:19:18

问得好。对于Python,答案很简单:

代码语言:javascript
复制
from google.appengine.ext.appstats import recording

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

也许Java中也有类似的API?

或者,Python版本也有一种灵活的方式来过滤要记录的请求;我认为在Java版本中,您可以通过在web.xml中使用和条目来完成类似的事情。(请参阅Java appstats文档。)

票数 1
EN

Stack Overflow用户

发布于 2012-05-16 06:49:05

杰夫,我想知道这是否能帮助你减少OutOfMemoryErrors的发生:How to reduce the memory usage of Appstats on Google App Engine Java

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10051446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档