WEBLOGIC
Technical Tip
?
제
HP JVM에서 Heap 영역 상세 모니터링
품
WEBLOGIC 7.0 모든 플랫폼(platform) 2002/10/24 웹로직과 같은 Java 기반 WAS들을 운용할 때 Heap 메모리의 할당 정책은 매우 중요하다. 너무 적으면 잦은 GC와 메모리 부족으로 인한 문제가 발생하지만, 반대로 너무 커도 시스템 메모리의 부족 현 상을 가져오거나 Full GC 시간이 길어져 양질의 서비스를 제공하기 어렵게 된다. 이러한 문제점들을 방지하기 위한 효율적인 방법은 시스템의 Heap 메모리 사용 현황을 자세히 모니터링 하여 꼭 필요한 메모리만을 할당하는 것이다. HP JDK 1.3부터는 이러한 모니터링 목적을 위한 한 가지 유용한 옵션 을 제공한다.
사용 OS 작 성 일 이슈사항
해 결 안
옵션을 사용하는 방법은 다음과 같다. - Xverbosegc:file = 은 모니터링 결과가 저장될 로그 파일 이름이다. 여기에는 다음과 같이 파일 대신 콘솔 출 력을 지정할 수도 있다. - Xverbosegc:file = stdout 다음은 이렇게 남긴 GC 모니터링 정보의 예이다.
로그의 포맷은 다음과 같다.
78
www.bea .co.kr
Bea Enterprise Solution Technical News
해 결 안
%1 : GC가 발생한 이유를 나타낸다. -1: New Generation 영역을 비움(Minor GC) 0-6: Full GC를 의미(Heap 메모리에서 Garbage를 제거하여 공간을 확보) 0: Call to System.gc(프로그램 내에서 System.gc() 호출) 1: Old Generation full(Old Generation이 모두 찼음) 2: Permanent Generation full(Permanent Generation 영역에 대한 GC) 3: Train Generation full 4: Old generation expanded on last scavenge 5: Old generation too full to scavenge 6: FullGCAlot %2: GC가 발생한 시간을 JVM이 기동한 이후부터의 상대 시간으로 표시 %3: GC가 발생한 회수(Full GC와 Minor GC가 별도로 관리 됨) %4: GC 발생에 직접적인 원인이 된 메모리 요청의 크기 %5: 객체가 Old Generation으로 넘어가기 전에 New Generation에 머무를 수 있는 시간 Eden 영역(New Generation의 일부) %6: GC 발생 이전의 크기 %7: GC 후 크기 %8: 영역의 전체 크기 Survivor 영역(New Gerneration의 일부) %9: GC 발생 이전의 크기 %10: GC 후 크기 %11: 영역의 전체 크기 Old Generation 영역 %12: GC 발생 이전의 크기 %13: GC 후 크기 %14: 영역의 전체 크기 Permanent Generation(로딩된 클래스 정보 등 : Reflective Object) %15: GC 발생 이전의 크기 %16: GC 후 크기 %17: 영역의 전체 크기 %18: GC에 소요된 시간
Technical Tip
예를 들어 다음의 로그를 보자.
www.bea .co.kr
79
WEBLOGIC
해 결 안
첫 번째 숫자 5는 이번 GC가 Full GC임을 나타내며, 두 번째 숫자 126483.565799는 GC가 발생한 시간이 JVM 기동 후 대략 35시간 후에 발생했음을 의미한다. 세 번째 숫자 69는 Full GC가 JVM 기동 후 69번째임을 나타내며, 네 번째 숫자 65040은 GC가 발생하게 된 직접적인 원인이 된 메모리 요청의 크기를 나타낸다. 286319560 0 286326784은 GC가 발생하기 전 Eden 영역이 거의 차 있던 상태에서 0으로 비워졌음을 나 타낸다. 22016584 0 35782656은 Survivor 영역이 GC 이전에 다 차 있지는 않았지만 역시 0으로 비워졌음 을 나타낸다. 409450496 457115384 715849728은 Old 영역의 크기가 대략 700MB이며, GC 이전에 400MB에서 459MB로약간 늘어났음을 나타낸다. 늘어난 이유는 바로 Survivor 영역이 비워지면서 Tenuring Threshold 를 넘긴 Long-Lived 객체들이 Old 영역으로 넘어오기 때문이다. 69333128 69333128 69468160는 로딩된 클래스들의 정보를 보관하는 Permanent Generation 영역의 이 용 상태를 나타낸다. 전체 크기는 대략 70MB인 것을 알 수 있다. 마지막의 2.950189는 GC 수행 시간이 대략 3초 가량임을 나타낸다.
Technical Tip
추가정보
다음은 참고 사이트이다. http://www1.sitraka.com/JUG/meetings/presentations/sep02/JUG%20Sept%202002.PPT http://www.hp.com/products1/unix/java/java2/sdkrte1_3/infolibrary/vintage/sdk13001/documentatio n.html http://h21007.www2.hp.com/dspp/files/unprotected/JavaATC/JavaPerfTune/JPTpaper/Xverbosegc AndExcelGraphs.pdf
80
www.bea .co.kr