2011-07-27 5 views
8

매트를 사용하여 두 개의 힙 덤프를 비교하고 있습니다. 저는 매일 힙 덤프를 가져 왔으며 매일 약 200 메가 씩 커졌습니다. 필자는 테이블이 보여주는 것 때문에 java.util.zip과 관련이 있다고 생각합니다. 그리고 최근에 많은 파일을 압축하고 압축 해제하는 새로운 프로세스를 추가했기 때문입니다. I는 분모를 열고 필터링 이때매트를 사용하여 메모리 누출을 찾는 데 도움이 필요합니다.

Heap dump histogram compare

를 (이미지 참조). 팽창 기. 그 결과 java.util.zip.Inflater의 큰 목록이 생성되었습니다. 이제는 이러한 것을 열어 놓은 것을보고 싶습니다. 따라서 하나를 골라 약하고 부드러운 참조를 제외하고 GC 루트에 대한 경로를 실행했습니다 (이미지 참조). 이 항아리의 인플레이션과 내 처리와는 아무 상관과 관련이있다처럼

GC Root

는 것 같습니다. 이 시점에서 나는 붙어있어 몇 가지 제안이 필요하다.

EDIT 1

숀 ThreadLocals을에 대해 물었다. 필터없이 dominator_tree를 보면 java.lang.ApplicationShutdownHooks가 힙의 58 %라는 것을 알 수 있습니다. 그 중 일부 항목을 확장하면 ThreadLocalMap에있는 것처럼 보입니다. 나는 그곳에 무엇을 넣었는지 어떻게 발견 할 수 있습니까?

enter image description here

편집 2

숀의 의견은 올바른 궤도에 나를 넣어. Glassfish v 2.0을 사용하고 있는데 memory leak이 있습니다. 새로운 LogManager를 계속 작성하여 ApplicationShutdownHooks 콜렉션에 추가합니다.

나는 ApplicationShutdownHooks를 열어 수동으로 컬렉션에서 개체를 제거하여 문제를 해결했습니다.

+0

GC 루트에 대한 모든 인스턴스의 경로는 다음과 같습니다. 이것은 대표 샘플이 아닐 수도 있습니다. –

+0

16k 개의 인스턴스가 있으므로 일부 인스턴스가 다를 수 있습니다. 나는 몇 가지를 살펴 보았다. 왜 내 이미지가 보이지 않는지 아는 사람 있습니까? – Preston

+0

그들은 나에게 잘 보이고있다. –

답변

0

Sean의 코멘트는 나를 정확한 경로에 올려 놓았습니다. Glassfish v 2.0을 사용하고 있으며 메모리 누수가 있습니다. 새로운 LogManager를 계속 작성하여 ApplicationShutdownHooks 콜렉션에 추가합니다.

나는 ApplicationShutdownHooks를 열어 수동으로 컬렉션에서 개체를 제거하여 문제를 해결했습니다.

관련 문제