2010-12-04 3 views
7

GC 로그를 분석하여 (예 : -XX에서 얻은 정보를 분석하지 않고) GC에서 소요 된 시간과 수집 된 메모리 양을 추적하고 싶습니다. JVM의 GC 이벤트 프로그래밍 방식의 알림

은 내가 좀 진 GcInfo 객체를 포함하는 메모리 정보를 제공 할 수있는 GarbageCollectorMXBean를 얻기 위해 썬의있다 ManagementFactory를 사용할 수 있다는 것을 발견하지만 난이 평균을 통해 모든 GC를 수집 할 수 있습니다 보장이 없습니다.

코드에서이 작업을 수행하는 방법을 아는 사람이 있습니까?

답변

4

GarbageCollectorMXBean은 Sun JVM에서 찾을 수있는 최고입니다. 제 경험상, 당신이 요구하는 것에 실제로 가깝게옵니다.

GC 통계를 얻기 위해 수시로 깨어날 수있는 전용 스레드가있을 수 있다고 상상해보십시오. 이것은 통계가 수집 될 때 결정론을 더합니다.

+0

그건 내가 찾은거야. 그러나 나는 GCMXbean의 행동을 확신하지 못합니다. getGCInfo()에 대한 문서는 "가장 최근 GCInfo를 반환하지만 모든 GCInfo를 반환하지는 않습니다"라고 알려줍니다. 이것은 사실일지도 모른다. 그리고 나 자신을 알아 내려고 시도하기 전에, 나는 누군가가 그 답을 알고 있는지 아는 것에 흥미가있을 것이다. – insitu

+1

BTW, 나는이 링크를 찾았습니다. http://robertmaldon.blogspot.com/2007/09/more-human-friendly-java-gc-timestamps.html 그것은 내가 찾고있는 것에 거의 가깝지만 정확히는 아닙니다. – insitu

0

이 정보를 얻을 수있는 도구의 범위가 주어지면 GC 동작을 분석하고 최적화하기 위해 도구를 사용하는 것이 좋습니다. 예 : 메모리 프로파일 러를 사용합니다.

문제는 문제에 대한 해결책을 지적하지 않으면 그 정보가별로 유용하지 않다는 것입니다. (그럼 당신이 고칠 수)

+3

나는 동의하지 않는다. 물론, 내 서버 앱 (지연 시간에 민감하기 때문에 GC는 큰 문제입니다)에서 GC 통계를 수집합니다.이 사실은 ** 문제가 있음을 알립니다. 예를 들어, 패턴 변경 사용. ** 파악하고 해결 ** ** 물론 문제는 다른 도구를 요구합니다. – NPE

+0

내가 얻으려고하는 것은 설정/분석/분석의 복잡성을 줄이기 위해 Java에서 사용하는 것입니다. jstat과 친구들은 훌륭하고, 제 3 자 도구 (대부분은 내가 알지 못하는)가 많이 있지만, 프로세스를 시작하고 출력을 분석한다는 의미입니다. 모든 정보가 JVM에서 나왔기 때문에 JVM에서이 정보에 액세스하는 방법이 있다고 생각할 수도 있습니다. – insitu

관련 문제