2011-09-02 3 views
5

다음 JVM은 다음 인수를 사용하면 자세한 GC 로그를 StdOut에 출력합니다.Java GC 세부 로그

-verbose:gc 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDetails 

그러나 StdOut에서 출력을 원하지 않고 모든 단일 GC에 대해 세부 사항을 필요로하지 않습니다. 프로그래밍 방식으로 이러한 로그에 사용 된 데이터에 액세스 할 수 있습니까? 내 자신의 로그 파일에 할당/수집 된 메모리 양을 이상적으로 시간이 지남에 따라 평균 개체 크기를 로그 할 수 싶습니다.

답변

4

당신은

-Xloggc:log_file_name 

이 파일은 JVM이 시작할 때마다 다시 초기화됩니다를 추가해야합니다, 그래서 당신은 분석을 위해 그것을 유지하려는 경우 안전한 장소로 이동하는 것을 잊지 말아.

자바를 이해하는 많은 명령 행 옵션의 전체 목록

자바 6

+0

감사합니다. API가 있으면 런타임에이 데이터에 액세스하고 할당되고 수집되고 승격되는 데이터 양에 대해 5 분마다 통계를 쓸 수 있기를 바랍니다. – mchr

+0

가비지 수집에 관한 많은 정보가 JMX를 통해 제공되며,'jconsole'을 열고 JVM에서 노출되는 다른 mbeans을 확인하십시오. JMX와 GC에 관해서도 여기에 몇 가지 질문이 있습니다. 독일어를 이해한다면이 기사와 관련 코드에는 흥미로운 아이디어가 포함되어 있습니다. http://www.torsten-horn.de/techdocs/jmx-gc.htm – fvu

+2

JVM 1.6.0_34부터 Java에서 로그를 회전시킬 수 있습니다. '-XX : + UseGCLogFileRotation -XX : NumberOfGCLogFiles = <파일 번호> -XX : GCLogFileSize = 세 가지 옵션이 필요하다는 ' 참고. 다른 팁은 여기에 있습니다 : http://jyates.github.io/2012/11/05/rolling-java-gc-logs.html –

0

대신 메모리 풀과 GC의 JMX 콩을 사용할 수 있습니다에 대한 here을 찾을 수 있습니다. 그들은 당신이 자유로운 계획에 질문 할 수있는 카운터를 얻는 이점이있다. 단점은 다양한 VM 공급 업체, 버전 및 GC 설정에서 서로 다릅니다. 이것에 대한 예를 들어

java.lang:type=GarbageCollector,name=Copy 
    CollectionCount, ColletionTime, LastGCInfo[1].duration,memoryUSageBefore/After 
java.lang:type=GarbageCollector,name=MarkSweepCompact 
    CollectionCount, CollectionTime, LastGCInfo[1].duration,memoryUSageBefore/After 
java.lang:type=Memory 
    HeapMemoryUsage[1].commited,init,max,used 
+0

JMX의 CollectionTime 값은 신뢰할 수 있습니까? gc.log에서 합산 ​​한 시간과 비교했을 때 JMX 값은 GC에서 소비 한 시간보다 현저하게 적게 계산되었습니다. –

관련 문제