2009-09-08 2 views
4

우리는 full gc의 무한 루프로 진행되는 프로덕션 시스템을 가지고 있으며 메모리 드롭은 8 기가에서 불과 2 분 만에 1 MB를 좋아합니다.힙 덤프 루트 클래스

힙 덤프를 취한 후에 힙이 99 % 인 동일한 문자열을 가진 수백만 개의 java.lang.String 객체가있는 java.lang.Object ([Ljava.lang.Object]) 배열이 있다는 것을 알 수 있습니다.

그러나 코드에서 수정할 수 있도록이 클래스를 참조하는 클래스를 알려주지 않습니다.

JDK 6의 jmap 도구를 사용하여 힙 덤프를 가져 와서 JProfiler, NetBeans, SAP 메모리 분석기 및 IBM 메모리 분석기를 사용했지만 그 중 어떤 것도 이러한 거대한 객체 배열의 원인을 알려주지 않았습니다. ... 어떤 클래스가 그 클래스를 참조하고 있거나 포함하고 있는지.

정보를 얻으려면 다른 설정으로 다른 덤프를 가져 가야합니까? ... 아니면이 문제를 일으키는 범인 집단을 알아내는 데 도움이 될만한 다른 것 ... 그것은 많은 도움이 될 것입니다.

답변

3

저는 과거에 SAP 메모리 분석기를 사용해 왔으며 "욕심 많은 메모리 돼지"를 찾는 것은 정말 좋은 도구입니다.

아마도 다음 프레젠테이션이 도움이 될 수 있습니다. Effective Java Heap Memory Analysis on Enterprise-Scale.

+0

나는 YourKit을 사용하여 제작 노드 중 하나에 연결했고 참조로 완전한 힙 덤프를 얻을 수있었습니다. 제안을위한 Thx. –

0

당신은 단순히이 문자열을 소스와 클래스를 통해 grep하려고 했습니까?

+0

네 ..하지만 일부 입력 값이 전달됩니다. –

1

나는 이런 문제를 발견하기 전에 Eclipse Memory Analyzer을 사용했습니다. 보통 간단 할 때 범인을 찾기가 상당히 쉽지만 용어에 익숙해 져야합니다. 실제 덤프가 없으면이 문제의 원인을 알려주지 못합니다. 아마도이 문자열이 실제로 무엇을 포함하고 있는지 살펴 봐야 할 것입니다.