2017-11-03 8 views
0

JBoss EAP 7에서 메타 스페이스 누수 문제가 발생했으며 모든 핫 배포 후에이 누출이 발생했습니다. Java EHCache 3 리스너 및 메타 스페이스 문제

은 일부 검색 후, 나는이를 발견했습니다 https://blog.voina.org/docker-jboss-dies-with-java-lang-outofmemoryerror-metaspace-after-several-redeploys/

이이 실제로 어떤 클래스 참조를 저장 EHCache는 관련이는 metaspace에서 이전 클래스를 제거하는 JBoss의 클래스 로더를 방지 할 수있다. 제안이 리스너를 사용하는이 글에서

이 EHCache는 라이브러리에 포함 된

net.sf.ehcache.constructs.web.ShutdownListener 

불행하게도 우리가 EHCache는 3.2.0 사용하고 있고 해당 버전에는 청취자가없는, 어떤 대안이있다 그 리스너? 또는 "contextDestroyed"메서드에서 호출 할 수있는 똑같은 작업을 수행하는 메서드는 무엇입니까?

답변

2

더 이상 이러한 청취자는 필요하지 않습니다. 그러나 배포를 취소 할 때는 CacheManager을 닫는 것이 좋습니다. ServletContextListener에서 생성하는 경우, 그것을 파괴하는 것이 좋은 장소 인 것 같습니다.

클래스 로더 메모리 누수에 대해서는 Ehcache에 걸리지 않을 것이지만 불가능하지는 않습니다.

정확한 진단 방법은 아직 전개되지 않은 전쟁에서 패키지를 배포 해제하고 힙 덤프를 수행하고 (VisualVM과 같은 도구에서) 살펴본 다음 클래스 로더와 마지막으로 GC 루트를 찾습니다. 클래스 로더. 누수가 GC 루트에 연결됩니다.