문제

Glassfish Server에 EJB3 및 JSF가있는 엔터프라이즈 응용 프로그램이 있습니다. 이 응용 프로그램을 2 주 이상 실행 한 후 클래스 로딩에 문제가 있음을 깨달았습니다. 나는 이것이 Permgen의 문제라고 생각하지 않습니다. 페이지를 열 때마다 수업이로드되었지만 메모리에서 결코 지워지지 않았습니다. 다음은 내 서버 메모리의 스냅 샷입니다.

스냅 사진

따라서이 문제를 디버깅 할 수있는 방법에 대한 몇 가지 조언이 필요합니다.

도움이 되었습니까?

해결책

거기에 좋은 설명 이런 종류의 일이 발생하는 이유와 비슷한 문제에 대한 최근의 설명 여기.

사용 jhat 메모리를 점유하는 클래스를 찾은 다음, 클래스 로더를 유지할 수있는 정적 참조를 찾아 올바른 언로드를 방지 할 수 있습니다.

다른 팁

응용 프로그램을 다시로드하는 것처럼 보이지 않으며, 이는 명백한 대답이 될 것입니다. 정말 당신은 그 수업이 무엇인지 알고 싶습니다.

반사와 XSLT [C]는 클래스를 만드는 데 명백한 목표이지만, 이것은 엄청나게 규칙적으로 보입니다. 아마도 어떤 식 으로든 누출되는 어딘가에 시간 기반 캐시가있을 것입니다.

사용하는 경우 JSF 웹 프레임 워크 (MyFaces, Icefaces 등)에서 문제가 될 수 있습니다. 특히 응용 프로그램을 재배치하지 않는다는 사실을 감안할 때 페이지가 열거/닫을 때 발생합니다. 더 많은 디버깅 및 프로파일 링을 수행하기 전에 적절한 문제 추적기를 확인하는 것이 좋습니다.

또한 의도적으로 낮은 힙 공간으로 로컬 컴퓨터에 응용 프로그램을 배포하고 응용 프로그램의 웹 페이지 만 탐색하여 메모리 누출을 일관되게 재현하려고 시도 할 수 있습니다. 바라건대, 새로운 클래스가로드 될 때 어떤 종류의 행동이 발생하는지 정확하게 알 수 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top