2013-10-18 29 views
2

我得到OutOfMemory在我的應用程序中出現異常。我已經把堆轉儲並通過MAT進行了分析。在分析我的應用程序內存使用情況時,我無法理解這些嫌疑人背後的主要原因。tomcat中集羣環境中的內存泄露

請幫我理解這個泄漏嫌疑人以及它的相關解決方案。

犯罪嫌疑人1

線程org.apache.tomcat.util.threads.TaskThread @ 0x2bdf5ff8 「AJP-BIO-9002」 -exec-5保持與總規模113973288(局部變量50.72%)個字節。

該存儲器中的 「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) 在java的.lang.AbstractStringBuilder.expandCapacity(I)V(AbstractStringBuilder.java:100) at java.lang.AbstractStringBuilder.append(C)Ljava/lang/AbstractStringBuilder; (AbstractStringBuilder.java:572) at 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) at org.apache.myfaces.renderkit.html.util.ReducedHTMLParser.parse()V(ReducedHTMLParser.java:579) at org.apache.myfaces.renderkit.html.util.ReducedHTMLParser。解析(Ljava/lang/CharSequence; Lorg/apache/myfaces/renderkit/html/util/CallbackListener;)V(ReducedHTMLParser.java:66) at org.apache.myfaces.renderkit.html.util.DefaultAddResource.parseResponse(Ljavax/servlet/http/HttpServletRequest; Ljava/lang/String; Ljavax/servlet/http/HttpServletResponse;)V(DefaultAddResource.java:699) at 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(ApplicationFilte rChain.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) at org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request; Lorg/apache/catalina/connector/Response;)V(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Lorg/apache/catalina/connector/Request ; Lorg/apache/catalina/connector/Response;)V(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request; Lorg/apache/catalina /連接器/響應;)V(StandardHostValv (錯誤報告.v5)。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.invoke(Lorg/apache/catalina/connector/Request; Lorg/apache/catalina/connector/Response;)V(StandardEngineValve.java:118) at 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 (org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote /請求; Lorg/apache/coyote/Response;)V(CoyoteAdapter.java:395) at org.apache.coyote.ajp.AjpProcessor.process(Lorg/apache/tomcat/util/net/SocketWrapper;)Lorg/apache/tomcat/util/net/AbstractEndpoint $ Handler $ SocketState; (AjaxProcessor.java:301) at org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(Lorg/apache/tomcat/util/net/SocketWrapper; Lorg/apache/tomcat/util/net/SocketStatus;)Lorg /阿帕奇/ tomcat的/ UTIL/NET/AbstractEndpoint $處理器$ SocketState; (AjpProtocol.java:183) at 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) at java.lang.Thread.run()V(Thread的.java:662)通過裝 「java.lang.StringBuffer中」 的

可疑2

一個實例 「」 佔用59216088(26.35%)字節。該實例由org.apache.myfaces.renderkit.html.util.ReducedHTMLParser @ 0x276990e8引用,由​​「org.apache.catalina.loader.WebappClassLoader @ 0x29592038」加載。內存在由「」加載的「char []」的一個實例中累積。

+0

此問題可能更適合http://serverfault.com –

+0

您是否找到了答案?我是通過相同的東西尋找,並找不到「內存泄漏」。 在此先感謝 –

回答

0

它看起來像org.apache.myfaces.renderkit.html.util.ReducedHTMLParser是罪魁禍首。 ReducedHTMLParser的javadoc解釋了它的工作原理。它將整個HTML響應緩存在內存中,然後進行處理。它看起來像嘗試 - 並且失敗 - 處理非常大的響應。

+0

這很好,它在處理響應。在我的應用程序中,由於集羣環境。很多東西都保存在會話中。這可能是大量回應的原因嗎?什麼可能是避免它的解決方案。 – Shandilya

+0

我在Catalina日誌中也收到了一些泄漏消息,但不是確切或可能的原因。 – Shandilya

+0

那些日誌消息是...? –

1

您可以轉到內存分析器(MAT)的「dominator_tree」選項卡並展開TaskThread。這將向您顯示該taskthread中所有對象的保留堆。這可能會幫助您到達應用程序中導致問題的部分(代碼)。