3

我的应用程序出现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 at java.util.Arrays.copyOf([CI)[C (Arrays.java:2882) at 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/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/ Runnable;)V (ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run()V (ThreadPoolExecutor.java:908) 在 java.lang.Thread。

嫌疑人2

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

4

2 回答 2

2

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

于 2015-03-24T08:32:29.420 回答
0

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

于 2013-10-18T10:46:12.127 回答