2015-02-03 4 views
1

저는 Tomee, Primefaces 5.0 및 Apache SHiro를 사용하고 있습니다.Tomee Jaxrs 1.7.1 + Mojarra 2.29 메모리 누수

서버를 시작하면 600MB의 메모리가 소모됩니다. 많은 정보를 포함하고 있지만 ViewScoped 빈과 관련된 특정 페이지를 열고 닫으면 메모리 사용량이 1,6 GiB가됩니다. RequestScopped 빈조차도 다른 것들을 열면 똑같이됩니다. PreDestroy 메서드가 호출되고 있으므로 내 문제가 아닙니다. 이클립스 메모리 분석기를 사용하여

: 에 의해로드 "org.apache.openejb.core.WebContext"의

하나의 인스턴스는 "org.apache.catalina.loader.StandardClassLoader @ 0xa34f0cf0는" 1189717200 (97.83를 차지 %) 바이트. 이 메모리는 "java.util.concurrent.ConcurrentHashMap $ Segment []"인스턴스에 누적되어 에 의해 "system class loader"에 의해로드됩니다.

키워드 java.util.concurrent.ConcurrentHashMap의 $ 세그먼트 [] org.apache.openejb.core.WebContext org.apache.catalina.loader.StandardClassLoader 0xa34f0cf0

@ 그리고 종료를 실행할 때 .sh로, I가 다음에 catalina.out 한

org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks 심각 : 웹 애플리케이션 [/ projeto BIM-] 승 ThreadLocal을 만들어키 [[[email protected]20d785]]의 키와 [[java.util.HashMap] 유형의 값] (값 [{org.apache.shiro.util.ThreadContext_SECURITY[email protected]2d258973, org.apache.shiro.util.ThreadContext_SUBJECT_KEY = org.apache.shiro.web.subject. support[email protected]}]) 웹 응용 프로그램이 중지되었을 때 제거하지 못했습니다. 스레드 시간이 지남에 시도하고 가능성이 메모리 유출을 피하기 위해 갱신 될 수 있습니다.

하나의 세션 만 유지하거나 Tomee가 디스크에 세션 정보를 저장하도록 web.xml의 일부 구성을 설정하는 것과 같은 몇 가지 시도를했지만 아무 것도 효과가 없었습니다.

어떻게해야합니까?

// 새 정보 : 메모리가 1.6 GiB로 이동하여 최대 힙 공간이기 때문에 중지됩니다. 웹 서버가 OutOfMemoryError를 throw하기 시작합니다. 얼마나 더 많이 사용하는지 보려면이 값을 늘려 보겠습니다.

확인. 이제 Java 힙 공간을 3GB로 늘 렸습니다. 그리고 내 응용 프로그램은 그것을 모두 사용합니다. 그것은 분명히 메모리 누출입니다. 왜냐하면 많은 정보를 담고있는 특정 페이지를 열 때마다 메모리가 300MB까지 올라가고 결코 줄어들지 않기 때문입니다! 어떻게해야합니까?

답변

0

누출과 관련된 많은 것들이 보이지 않습니다.

WebContext는 모든 경고 그냥 아파치 시로 당신의 웹 애플리케이션에 쓰레드에 의해 보안 컨텍스트를 유지하기 위해 ThreadLocal를 사용하다 (앱이 실행되는 동안 당신이 그것을 볼 정상) TomEE에서 웹 애플리케이션

에 바인딩됩니다. 그것이 webapp에 의해로드 되었기 때문에 누출을 만들 수 있지만 패치시를 제외하고 당신은 그것을 도울 수 없습니다.

+0

그래서 이클립스 메모리 분석기의 보고서는 오탐입니다. 이와 같이 웹 응용 프로그램에 정상적인가요? 2 기가 바이트 이상의 메모리를 사용합니까? – LucasM

+1

아니요, 아니요, 내가 말한 것은 원래 게시물의 데이터가 사용자가 보는 누출을 진단하는 데 도움이되지 않는다는 것입니다. –