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

时间:2013-10-18 10:03:25

标签: 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%) )bytes。

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

线程堆栈

" AJP-BIO-9002" -exec -5-   在java.util.Arrays.copyOf([CI] [C(Arrays.java:2882))   at java.lang.AbstractStringBuilder.expandCapacity(I)V(AbstractStringBuilder.java:100)   at java.lang.AbstractStringBuilder.append(C)Ljava / lang / AbstractStringBuilder; (AbstractStringBuilder.java:572)   在java.lang.StringBuffer.append(C)Ljava / lang / StringBuffer; (StringBuffer.java:320)   at org.apache.myfaces.renderkit.html.util.ReducedHTMLParser.consumeString(C)Ljava / lang / String; (ReducedHTMLParser.java:303)   at org.apache.myfaces.renderkit.html.util.ReducedHTMLParser.consumeAttrValue()Ljava / lang / String; (ReducedHTMLParser.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 / util / net / AbstractEndpoint $处理器$ 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)   at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run()V(JIoEndpoint.java:302)   at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Ljava / lang / Runnable;)V(ThreadPoolExecutor.java:886)   at 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 []"的一个实例中累积。由""。

加载

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

看起来像org.apache.myfaces.renderkit.html.util.ReducedHTMLParser是罪魁祸首。 ReducedHTMLParser的javadoc解释了它的工作原理。它将整个HTML响应缓冲在内存中,然后进行处理。看起来它正在尝试 - 并且失败 - 处理一个非常大的响应。

相关问题