WEBLOGIC
? HP JVM에서 Heap 영역 상세 모니터링
Technical Tip
제 품 WEBLOGIC 7.0
사용 OS 모든 플랫폼(platform)
작 성 일 2002/10/24
이슈사항 웹로직과 같은 Java 기반 WAS들을 운용할 때 Heap 메모리의 할당 정책은 매우 중요하다.
너무 적으면 잦은 GC와 메모리 부족으로 인한 문제가 발생하지만, 반대로 너무 커도 시스템 메모리의 부족 현
상을 가져오거나 Full GC 시간이 길어져 양질의 서비스를 제공하기 어렵게 된다.
이러한 문제점들을 방지하기 위한 효율적인 방법은 시스템의 Heap 메모리 사용 현황을 자세히 모니터링 하여
꼭 필요한 메모리만을 할당하는 것이다. HP JDK 1.3부터는 이러한 모니터링 목적을 위한 한 가지 유용한 옵션
을 제공한다.
해 결 안 옵션을 사용하는 방법은 다음과 같다.
- Xverbosegc:file =
은 모니터링 결과가 저장될 로그 파일 이름이다. 여기에는 다음과 같이 파일 대신 콘솔 출
력을 지정할 수도 있다.
- Xverbosegc:file = stdout
다음은 이렇게 남긴 GC 모니터링 정보의 예이다.
로그의 포맷은 다음과 같다.
78 www.bea .co.kr
Bea Enterprise Solution Technical News
해 결 안
%1 : GC가 발생한 이유를 나타낸다.
Technical Tip
-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에 소요된 시간
예를 들어 다음의 로그를 보자.
www.bea .co.kr 79
WEBLOGIC
해 결 안 첫 번째 숫자 5는 이번 GC가 Full GC임을 나타내며, 두 번째 숫자 126483.565799는 GC가 발생한 시간이
Technical Tip
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초 가량임을 나타낸다.
추가정보 다음은 참고 사이트이다.
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