2

내가 받고있어 OutOfMemory 내 애플 리케이션에서 예외. 나는 힙 덤프를 가져 와서 매트를 통해 ananlyzed. 용의자 다음과 발견 내 응용 프로그램 메모리 사용량을 분석하는 동안. 나는 이들 용의자들의 주요 원인을 이해할 수 없다.바람둥이 클러스터 환경에서 메모리 누수

누출 용의자를 이해하고 이에 대한 적절한 해결책을 알려주십시오.

의심 1

스레드 org.apache.tomcat.util.threads.TaskThread @ 0x2bdf5ff8 "AJP 바이오 9002"간부 -5- 총 크기 113,973,288 (로컬 변수를 유지 50.72 %) 바이트.

메모리는 "@ org.apache.catalina.loader.StandardClassLoader 0x293b4488"로드 "org.apache.tomcat.util.threads.TaskThread"의 인스턴스에 축적된다.

스레드 스택

"AJP 바이오 9002"간부 -5- java.util.Arrays.copyOf ([CI) C (Arrays.java:2882) 에서 자바에서 .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. parse (Ljava/lang/CharSequence; Lorg/apache/myfaces/renderkit/html/util/CallbackListener;) V (ReducedHTMLParser.java:66) at org.apache.myfaces.renderkit.html.util.DefaultAddResource.parseResponse (Ljavax (Ljavax/servlet/http/HttpServletResponse)에서 V (DefaultAddResource.java : 699) 에있는 org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter (/ servlet/http/HttpServletRequest; ServletResponse, Ljavax/servlet/ServletResponse, Ljavax/servlet/ServletResponse) V (ExtensionsFilter.java:157) 에서 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (Ljavax/servlet/ServletRequest; V (ApplicationFilte) rChain.java : 243) org.apache.catalina.core.ApplicationFilterChain.doFilter (Ljavax/servlet/ServletRequest; Ljavax/servlet/ServletResponse;) V (ApplicationFilterChain.java:210) at org.apache.catalina.core (Lorg/apache/catalina/connector/Response) .V (StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke (org/apache/catalina/connector/Request; Lorg/apache/catalina/connector/Response; ; Lorg/apache/catalina/connector/Response;) V (AuthenticatorBase.java:462) org.apache.catalina.core.StandardHostValve.invoke (Lorg/apache/catalina/connector/Request; Lorg/apache/catalina/커넥터/응답;) V (StandardHostValv (Lorg/apache/catalina/connector/Request; Lorg/apache/catalina/connector/Response;) V (ErrorReportValve.Envoke.Avoke)java : 100) org.apache.catalina.valves.AccessLogValve.invoke (Lorg/apache/catalina/connector/요청, Lorg/apache/catalina/connector/Response;) V (AccessLogValve.java:562) at org .apache.catalina.core.StandardEngineValve.invoke (org/apache/catalina/connector/Request; .vv (JvmRouteBinderValve.java:218) at org.apache.catalina.ha.tcp.ReplicationValve.invoke (org.apache.catalina.ha.tcp.invoke에서 세션 .JvmRouteBinderValve.invoke (Lorg/apache/catalina/connector/요청, Lorg/apache/catalina/connector/Response; org.apache.catalina.connector.CoyoteAdapter.service (Lorg/apache/coyote/connector/Response;)에서 V (ReplicationValve.java:333) 요청; 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/아파치/바람둥이/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) 의 java.util.concurrent.ThreadPoolExecutor $ Worker.run() V (ThreadPoolExecutor.java:908) 의 java.lang.Thread.run() V (스레드 된 .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를 확장 할 수 있습니다. 그러면 해당 작업 스레드에있는 모든 개체의 유지 된 힙이 표시됩니다. 이것은 응용 프로그램에서 문제의 원인이되는 부분 (코드)에 도달하는 데 도움이 될 수 있습니다.