【问题标题】:Memory leakage in cluster environment in tomcattomcat集群环境内存泄漏
【发布时间】:2013-10-27 03:12:57
【问题描述】:

我的应用出现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; (减少 HTMLParser.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/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[]”的一个实例中累积。

【问题讨论】:

  • 这个问题可能更适合serverfault.com
  • 你找到答案了吗?我有点在看同样的东西,找不到“内存泄漏”。提前致谢

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 很好,它正在处理其中的响应。由于集群环境,在我的应用程序中。很多东西都在会话中。这可能是引起大反响的原因吗?避免它的解决方案是什么。
    • 我在 Catalina 日志中也收到了一些泄漏消息,但不是确切或可能的原因。
    • 而那些日志消息是...?
    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2013-06-25
    • 2012-08-20
    • 2012-08-06
    • 2013-07-29
    相关资源
    最近更新 更多