tomcat集群环境内存泄漏

Sha*_*lya 5 java memory-leaks memory-management out-of-memory tomcat6

我的应用程序中出现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; (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) at 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/请求;Lorg/apache/catalina/connector/Response;)V (StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/连接器/响应;)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) at org.apache.catalina.core.StandardEngineValve。调用(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) at org. apache.catalina.ha.tcp.ReplicationValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V (ReplicationValve.java:333) at org.apache.catalina.connector。 CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V (CoyoteAdapter.java:395) at org.apache.coyote.ajp.AjpProcessor.process(Lorg/apache/tomcat/util/网/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$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/可运行;)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[]”的一个实例中。

Mar*_*mas 0

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