java - tomcat集群环境中的内存泄漏

标签 java memory-management memory-leaks tomcat6 out-of-memory

我的应用程序中出现OutOfMemory异常。我已经采取了堆转储,并通过MAT进行了分析。在分析我的应用程序内存使用情况时,我发现了以下可疑之处。我无法理解这些嫌疑犯背后的主要原因。

请帮助我了解这种泄漏嫌疑人以及相关的解决方案。

嫌疑犯1

线程org.apache.tomcat.util.threads.TaskThread @ 0x2bdf5ff8“ ajp-bio-9002” -exec-5保留局部变量,其总大小为113,973,288(50.72%)字节。

内存存储在由“ org.apache.catalina.loader.StandardClassLoader @ 0x293b4488”加载的“ org.apache.tomcat.util.threads.TaskThread”的一个实例中。

线程堆栈

“ ajp-bio-9002” -exec-5
  在java.util.Arrays.copyOf([CI)[C(Arrays.java:2882)
  在java.lang.AbstractStringBuilder.expandCapacity(I)V(AbstractStringBuilder.java:100)
  在java.lang.AbstractStringBuilder.append(C)Ljava / lang / AbstractStringBuilder; (AbstractStringBuilder.java:572)
  在java.lang.StringBuffer.append(C)Ljava / lang / StringBuffer; (StringBuffer.java:320)
  在org.apache.myfaces.renderkit.html.util.ReducedHTMLParser.consumeString(C)Ljava / lang / String;中(ReducedHTMLParser.java:303)
  在org.apache.myfaces.renderkit.html.util.ReducedHTMLParser.consumeAttrValue()Ljava / lang / String;中(减少HTMLParser.java:327)
  在org.apache.myfaces.renderkit.html.util.ReducedHTMLParser.parse()V(ReducedHTMLParser.java:579)
  在org.apache.myfaces.renderkit.html.util.ReducedHTMLParser.parse(Ljava / lang / CharSequence; Lorg / apache / myfaces / renderkit / html / util / CallbackListener;)V(ReducedHTMLParser.java:66)
  org.apache.myfaces.renderkit.html.util.DefaultAddResource.parseResponse(Ljavax / servlet / http / HttpServletRequest; Ljava / lang / String; Ljavax / servlet / http / HttpServletResponse;)V(DefaultAddResource.java:699)
  在org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(Ljavax / servlet / ServletRequest; Ljavax / servlet / ServletResponse; Ljavax / servlet / FilterChain;)V(ExtensionsFilter.java:157)
  在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax / servlet / ServletRequest; Ljavax / servlet / ServletResponse;)V(ApplicationFilterChain.java:243)
  在org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax / servlet / ServletRequest; Ljavax / servlet / ServletResponse;)V(ApplicationFilterChain.java:210)
  在org.apache.catalina.core.StandardWrapperValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(StandardWrapperValve.java:240)
  在org.apache.catalina.core.StandardContextValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(StandardContextValve.java:164)
  在org.apache.catalina.authenticator.AuthenticatorBase.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(AuthenticatorBase.java:462)
  在org.apache.catalina.core.StandardHostValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(StandardHostValve.java:164)
  在org.apache.catalina.valves.ErrorReportValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(ErrorReportValve.java:100)
  在org.apache.catalina.valves.AccessLogValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(AccessLogValve.java:562)
  在org.apache.catalina.core.StandardEngineValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(StandardEngineValve.java:118)
  在org.apache.catalina.ha.session.JvmRouteBinderValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(JvmRouteBinderValve.java:218)
  在org.apache.catalina.ha.tcp.ReplicationValve.invoke(Lorg / apache / catalina / connector / Request; Lorg / apache / catalina / connector / Response;)V(ReplicationValve.java:333)
  在org.apache.catalina.connector.CoyoteAdapter.service(Lorg / apache / coyote / Request; Lorg / apache / coyote / Response;)V(CoyoteAdapter.java:395)
  在org.apache.coyote.ajp.AjpProcessor.process(Lorg / apache / tomcat / util / net / SocketWrapper;)Lorg / apache / tomcat / util / net / AbstractEndpoint $ Handler $ SocketState; (AjpProcessor.java:301)
  在org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(Lorg / apache / tomcat / util / net / SocketWrapper; Lorg / apache / tomcat / util / net / SocketStatus;)Lorg / apache / tomcat / utilcat / util / net / AbstractEndpoint $ Handler $ SocketState; (AjpProtocol.java:183)
  在org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(Lorg / apache / tomcat / util / net / SocketWrapper;)Lorg / apache / tomcat / util / net / AbstractEndpoint $ Handler $ SocketState; (AjpProtocol.java:169)
  在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run()V(JIoEndpoint.java:302)
  在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Ljava / lang / Runnable;)V(ThreadPoolExecutor.java:886)
  在java.util.concurrent.ThreadPoolExecutor $ Worker.run()V(ThreadPoolExecutor.java:908)
  在java.lang.Thread.run()V(Thread.java:662)

嫌疑犯2

由“”加载的“ java.lang.StringBuffer”的一个实例占用59,216,088(26.35%)个字节。该实例由org.apache.myfaces.renderkit.html.util.ReducedHTMLParser @ 0x276990e8引用,并由“ org.apache.catalina.loader.WebappClassLoader @ 0x29592038”加载。内存在由“”加载的“ char []”的一个实例中累积。

最佳答案

您可以转到内存分析器(MAT)的“ dominator_tree”选项卡,然后展开TaskThread。这将向您显示该任务线程中所有对象的保留堆。这可以帮助您找到导致问题的应用程序中的部分(代码)。

关于java - tomcat集群环境中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446896/

相关文章:

java - 无法找到或加载主类 org.apache.giraph.yarn.GiraphApplicationMaster

java - 为什么我会收到此 "unreachable statement"错误?

objective-c - 相当于ARC下保留实例变量

c++ - 在 std::shared_ptr 上使用 .reset() 是否会删除所有实例

c - realloc() 泄漏内存

android - Backstack上的Android fragment 占用过多内存

java - 如何从 OnSuccessListener<QuerySnapshot>() 获取数据

java - JUnit - 所有测试类何时执行的监听器?

ios - AlamofireImage 没有释放内存

ios - iOS8 中的内存管理问题,Objective C