如何减少Google App Engine Java上Appstats的内存使用量 [英] How to reduce the memory usage of Appstats on Google App Engine Java

查看:166
本文介绍了如何减少Google App Engine Java上Appstats的内存使用量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这与 Java Appengine APPSTATS导致java出问题有关内存错误



Appstats似乎在128MB实例上导致java.lang.OutOfMemoryError,我不知道是否有办法减少日志记录的数量。
是否有方法从堆栈跟踪中过滤一些包名?



GAE API:

 @ 14ms memcache.Get real = 7ms api = 0ms 
堆栈:
com.google.appengine.tools.appstats.Recorder:290 makeAsyncCall()
com.google.apphosting.api.ApiProxy:184 makeAsyncCall()
com.google.apphosting.api.ApiProxy:123 makeAsyncCall()
com.google.appengine.api.memcache.MemcacheServiceApiHelper:104 makeAsyncCall()
com.google.appengine.api.memcache.AsyncMemcacheServiceImpl:372 doGetAll()
com.google.appengine.api.memcache.AsyncMemcacheServiceImpl:333 getIdentifiables()
com.google .appengine.api.memcache.MemcacheServiceImpl:61 getIdentifiables()

我的appplication API:

  com.googlecode.objectify.cache.EntityMemcache:215 getAll()
com.googlecode.objectify.cache.CachingAsyncDatastoreService:253 get ()
com.googlecode.objectify.cache.CachingDatastoreService:161 get()
com.googlecode.objectify.cache.CachingDatastoreService:147 get()
com.googlecode.objectify.cache.CachingDatastoreService:128 get()
siena.gae.GaePersistenceManager:231 getByKey()
siena.Model:106 getByKey()
com.sirtrack.iridium.model.GroupEntity:147 getByKey()
com.sirtrack.iridium.task.ProjectUpdateTask:49 doPost()

无关:

  javax.servlet.http.HttpServlet:637 service()
javax.servlet.http.HttpServlet:717 service()
org.mortbay.jetty.servlet.ServletHolder:511 handle()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1166 doFilter()
com.google.appengine.tools.appstats.AppstatsFilter:141 doFilter()
org.mortbay.jetty.servlet .ServletHandler $ CachedChain:1157 doFilter()
org.vosao.filter.SiteFilter:106 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
org .vosao.filter.RewriteFilter:79 doFilter()
o rg.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
org.vosao.filter.AuthenticationFilter:83 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter ()
org.vosao.filter.PluginCronFilter:78 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
org.vosao.filter.LanguageFilter: 66 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
org.vosao.filter.UpdateFilter:78 doFilter()
org.mortbay.jetty。 servlet.ServletHandler $ CachedChain:1157 doFilter()
org.vosao.filter.InitFilter:80 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
org.vosao.filter.ContextFilter:74 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
com.google.apphosting.utils.servlet.ParseBlobUploadFilter:102 doFilter ()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
com.google.apphosting.runtime.jetty.SaveSessionFilter:35 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
com.google.apphosting.utils .servlet.TransactionCleanupFilter:43 doFilter()
org.mortbay.jetty.servlet.ServletHandler $ CachedChain:1157 doFilter()
org.mortbay.jetty.servlet.ServletHandler:388 handle()
org.mortbay.jetty.security.SecurityHandler:216 handle()
org.mortbay.jetty.servlet.SessionHandler:182 handle()
org.mortbay.jetty.handler.ContextHandler:765 handle() )
org.mortbay.jetty.webapp.WebAppContext:418 handle()
com.google.apphosting.runtime.jetty.AppVersionHandlerMap:249 handle()
org.mortbay.jetty.handler .HandlerWrapper:152 handle()
org.mortbay.jetty.Server:326 handle()
org.mortbay.jetty.HttpConnection:542 handleRequest()
org.mortbay.jetty.HttpConnection $ RequestHandler:923 headerComplete()
com.google.apphosting.runtime.jetty.RpcRequestParser:76解析Available()
org.mortbay.jetty.HttpConnection:404 handle()
com.google.apphosting.runtime.jetty.JettyServletEngineAdapter:135 serviceRequest()
com.google.apphosting.runtime .JavaRuntime $ RequestRunnable:446 run()
com.google.tracing.TraceContext $ TraceContextRunnable:449 runInContext()
com.google.tracing.TraceContext $ TraceContextRunnable $ 1:455 run()
com.google.tracing.TraceContext:695 runInContext()
com.google.tracing.TraceContext $ AbstractTraceContextCallback:333 runInInheritedContextNoUnref()
com.google.tracing.TraceContext $ AbstractTraceContextCallback:325 runInInheritedContext()
com.google.tracing.TraceContext $ TraceContextRunnable:453 run()
com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry:251 run()
java.lang.Thread:679 run()

以下是可能导致堆栈跟踪OutOfMemoryError的堆栈跟踪:

  / _ah / queue / projectupdate的错误
java.lan g.OutOfMemoryError:java.util.Arrays.copyOf上的Java堆空间
(Arrays.java:3057)$ java.util.AbstractStringBuilder.expandCapacity上的
(AbstractStringBuilder.java:117)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:407)
at java.lang.StringBuffer.append(StringBuffer.java:241)
at java.io.StringWriter.write(StringWriter.java: 112)在java.io.PrintWriter.write上的
(PrintWriter.java:429)在java.io.PrintWriter.write上的
(PrintWriter.java:446)在java.io.PrintWriter上的
.print(PrintWriter.java:576)
at java.io.PrintWriter.println(PrintWriter.java:712)
at java.lang.Throwable.printStackTrace(Throwable.java:529)
com.google.appengine.tools.appstats.Recorder.createStackTrace(Recorder.java:160)
com.google.appengine.tools.appstats.Recorder.initializeIntermediary(Recorder.java:271)
在com.google.appengine.tools.appstats.Recorder.makeAsyncCall(Recorder.java:290)
at com.g ooglecode.objectify.cache.TriggerFutureHook.makeAsyncCall(TriggerFutureHook.java:144)
at com.google.apphosting.api.ApiProxy.makeAsyncCall(ApiProxy.java:184)

对于Google工程师,这里是给这些错误的链接

解决方案

)在com.google.appengine.tools.appstats.Recorder.java类中称为maxLinesOfStackTrace。



在web.xml中:

 < 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>

它似乎可以在本地工作,我会告诉你它是否也有助于避免OutOfMemoryError。

This is related to question Java Appengine APPSTATS causing java out of memory error.

Appstats seems to cause a java.lang.OutOfMemoryError on 128MB instances and I wonder whether there are ways to reduce the amount of logging. Is there a way to filter some package names from the stack trace?

GAE API:

 @14ms memcache.Get real=7ms api=0ms
Stack:
  com.google.appengine.tools.appstats.Recorder:290 makeAsyncCall()
  com.google.apphosting.api.ApiProxy:184 makeAsyncCall()
  com.google.apphosting.api.ApiProxy:123 makeAsyncCall()
  com.google.appengine.api.memcache.MemcacheServiceApiHelper:104 makeAsyncCall()
  com.google.appengine.api.memcache.AsyncMemcacheServiceImpl:372 doGetAll()
  com.google.appengine.api.memcache.AsyncMemcacheServiceImpl:333 getIdentifiables()
  com.google.appengine.api.memcache.MemcacheServiceImpl:61 getIdentifiables()

my appplication API:

  com.googlecode.objectify.cache.EntityMemcache:215 getAll()
  com.googlecode.objectify.cache.CachingAsyncDatastoreService:253 get()
  com.googlecode.objectify.cache.CachingDatastoreService:161 get()
  com.googlecode.objectify.cache.CachingDatastoreService:147 get()
  com.googlecode.objectify.cache.CachingDatastoreService:128 get()
  siena.gae.GaePersistenceManager:231 getByKey()
  siena.Model:106 getByKey()
  com.sirtrack.iridium.model.GroupEntity:147 getByKey()
  com.sirtrack.iridium.task.ProjectUpdateTask:49 doPost()

irrelevant:

  javax.servlet.http.HttpServlet:637 service()
  javax.servlet.http.HttpServlet:717 service()
  org.mortbay.jetty.servlet.ServletHolder:511 handle()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1166 doFilter()
  com.google.appengine.tools.appstats.AppstatsFilter:141 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.SiteFilter:106 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.RewriteFilter:79 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.AuthenticationFilter:83 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.PluginCronFilter:78 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.LanguageFilter:66 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.UpdateFilter:78 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.InitFilter:80 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.vosao.filter.ContextFilter:74 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  com.google.apphosting.utils.servlet.ParseBlobUploadFilter:102 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  com.google.apphosting.runtime.jetty.SaveSessionFilter:35 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  com.google.apphosting.utils.servlet.TransactionCleanupFilter:43 doFilter()
  org.mortbay.jetty.servlet.ServletHandler$CachedChain:1157 doFilter()
  org.mortbay.jetty.servlet.ServletHandler:388 handle()
  org.mortbay.jetty.security.SecurityHandler:216 handle()
  org.mortbay.jetty.servlet.SessionHandler:182 handle()
  org.mortbay.jetty.handler.ContextHandler:765 handle()
  org.mortbay.jetty.webapp.WebAppContext:418 handle()
  com.google.apphosting.runtime.jetty.AppVersionHandlerMap:249 handle()
  org.mortbay.jetty.handler.HandlerWrapper:152 handle()
  org.mortbay.jetty.Server:326 handle()
  org.mortbay.jetty.HttpConnection:542 handleRequest()
  org.mortbay.jetty.HttpConnection$RequestHandler:923 headerComplete()
  com.google.apphosting.runtime.jetty.RpcRequestParser:76 parseAvailable()
  org.mortbay.jetty.HttpConnection:404 handle()
  com.google.apphosting.runtime.jetty.JettyServletEngineAdapter:135 serviceRequest()
  com.google.apphosting.runtime.JavaRuntime$RequestRunnable:446 run()
  com.google.tracing.TraceContext$TraceContextRunnable:449 runInContext()
  com.google.tracing.TraceContext$TraceContextRunnable$1:455 run()
  com.google.tracing.TraceContext:695 runInContext()
  com.google.tracing.TraceContext$AbstractTraceContextCallback:333 runInInheritedContextNoUnref()
  com.google.tracing.TraceContext$AbstractTraceContextCallback:325 runInInheritedContext()
  com.google.tracing.TraceContext$TraceContextRunnable:453 run()
  com.google.apphosting.runtime.ThreadGroupPool$PoolEntry:251 run()
  java.lang.Thread:679 run()

Here's a stack trace of the maybe-caused-by-stacktrace OutOfMemoryError:

Error for /_ah/queue/projectupdate
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3057)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:407)
    at java.lang.StringBuffer.append(StringBuffer.java:241)
    at java.io.StringWriter.write(StringWriter.java:112)
    at java.io.PrintWriter.write(PrintWriter.java:429)
    at java.io.PrintWriter.write(PrintWriter.java:446)
    at java.io.PrintWriter.print(PrintWriter.java:576)
    at java.io.PrintWriter.println(PrintWriter.java:712)
    at java.lang.Throwable.printStackTrace(Throwable.java:529)
    at com.google.appengine.tools.appstats.Recorder.createStackTrace(Recorder.java:160)
    at com.google.appengine.tools.appstats.Recorder.initializeIntermediary(Recorder.java:271)
    at com.google.appengine.tools.appstats.Recorder.makeAsyncCall(Recorder.java:290)
    at com.googlecode.objectify.cache.TriggerFutureHook.makeAsyncCall(TriggerFutureHook.java:144)
    at com.google.apphosting.api.ApiProxy.makeAsyncCall(ApiProxy.java:184)

For Google Engineers, here's a link to those errors

解决方案

I've found an undocumented (AFAIK) parameter called "maxLinesOfStackTrace" in the class com.google.appengine.tools.appstats.Recorder.java.

In web.xml:

<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>

It seems to work locally, I'll let you know whether it also helps avoiding the OutOfMemoryError.

这篇关于如何减少Google App Engine Java上Appstats的内存使用量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆