복붙노트

[SPRING] Tomcat에서 배포 해제 메모리 누수를 피할 수있는 방법이 있습니까?

SPRING

Tomcat에서 배포 해제 메모리 누수를 피할 수있는 방법이 있습니까?

이 질문은 Tomcat 관리자의 "Find Leaks"버튼을 테스트 해 본 결과 다음과 같은 결과를 얻은 모든 사람들을위한 것입니다 :

나는 이것이 빈번한 재배포로 인해 종종 나타나는 "Perm Gen space"오류와 관련이 있다고 가정하고 있습니다.

그래서 배포 할 때 jconsole에서 볼 수있는 것은로드 된 클래스가 약 2k에서 5k로 이동한다는 것입니다. 그렇다면 배포 취소가 2k로 내려야한다고 생각 하겠지만 5k로 유지됩니다.

또한 다음 JVM 옵션을 사용해 보았습니다.

-XX : + CMSClassUnloadingEnabled -XX : + UseConcMarkSweepGC -XX : + CMSPermGenSweepingEnabled

나는 사용 된 페름 겐 공간의 양에서 아주 작은 딥을 보았지만 기대했던 것이 아니었고로드 된 클래스 수는 떨어지지 않았습니다.

그래서 Tomcat을 구성하거나 배포 취소시 응용 프로그램이 더 잘 언로드되도록 디자인하는 방법이 있습니까? 아니면 몇 가지 주요 디버깅 세션 후에 서버를 다시 시작해야합니까?

Tomcat 버전 출력 :

최신 정보:

셀리아스의 대답 덕분에 좀 더 파기를하기로 결심했습니다. CXF, 스프링, JAXB 덕분에 어플리케이션이 나올 수 있다고 생각했습니다.

Java 애플리케이션을 프로파일 링하는 방법을 배운 후에 Tomcat의 프로파일 러를 가리키고 메모리에서 오브젝트와 클래스가 어떻게 보이는지 확인하기 위해 힙 덤프 및 스냅 샷을 가져 왔습니다. CXF / JAXB (wsdl2java) 생성 클래스에 사용 된 XML 스키마의 열거 중 일부가 배포 취소 후에도 남아 있다는 것을 발견했습니다. 내 힙 덤프에 따르면 개체가지도에 묶인 것처럼 보입니다. 면책 조항 : 필자는 아직 프로파일 링을 사용하여 약간 녹색임을 인정하고 객체 트리의 호출 트리를 추적하면 Java에서 어려울 수 있습니다.

또한 나는 서비스를 호출조차하지 않았다는 것을 언급해야한다. 객체 자체는 배포시 Spring에서 시작된 리플렉션을 통해로드 된 것으로 보입니다. 나는 Spring에서 CXF 서비스를 설정하는 컨벤션을 따랐다 고 생각합니다. 그래서 이것이 Spring / CXF, JAXB, reflection의 오류라면 100 % 확실하지 않습니다.

참고로, 문제의 애플리케이션은 Spring / CXF를 사용하는 웹 서비스이고 XML은 다소 복잡한 스키마 (NIEM의 확장) 일 수 있습니다.

해결법

  1. ==============================

    1.누수가 발생하지 않도록하려면 다음을 수행해야합니다.

    누수가 발생하지 않도록하려면 다음을 수행해야합니다.

    ThreadLocal과 MemoryLeaks에 대한 좋은 글이 있습니다 - http://blog.arendsen.net/index.php/2005/02/22/threadlocals-and-memory-leaks-revisited/

  2. ==============================

    2.Tomcat 7은이 영역에서 개선점을 가져 오기로되어 있습니다. Apache Tomcat 7의 기능, No More Leaks 절을 참조하십시오!

    Tomcat 7은이 영역에서 개선점을 가져 오기로되어 있습니다. Apache Tomcat 7의 기능, No More Leaks 절을 참조하십시오!

    그들은 이제 웹 애플리케이션으로 인한 많은 메모리 누수에 대처할 수 있다고 생각합니다. 불행히도 아직 베타 버전입니다.

    그 외에도, 나는 똑같은 경험을하고 해결책을 찾지 못했다고 말할 수 있습니다. 배포 할 때는 나중에 Tomcat을 다시 시작해야합니다. 내 웹 응용 프로그램, Tomcat, Hibernate, Tapestry 또는 그 중 몇 가지를 알 수 없습니다.

  3. from https://stackoverflow.com/questions/4565105/is-there-a-way-to-avoid-undeployment-memory-leaks-in-tomcat by cc-by-sa and MIT license