"올바른 성장과 따뜻한 나눔"이 있는 넥스트리
Java 애플리케이션은 메모리 관리를 자동으로 해주어 개발자를 행복하게 만들었지만 그 반면에 JVM 메모리 문제는 java 애플리케이션 성능에 굉장한 영향을 미칩니다.
특히 대량의 트랜잭션이 발생하는 Java 애플리케이션의 경우 프로그램 만들때도 메모리 사용에 대해 많이 신경을 써야하고 튜닝 시 메모리 설정에 굉장히 신경써야 합니다.
성능에 문제가 발생했을 경우 메모리의 사용패턴을 살펴볼 필요가 있습니다. Full GC라도 하는 경우에는 JVM이 아예 잠시 멈추거나 걷잡을 수 없는 상황(hang...)으로 갈 수도 있습니다.
Garbage Collection 기록을 남기자
대부분의 JVM은 GC 기록을 남기는 옵션을 지원합니다. 그 옵션은 -verbose:gc 이고 비표준 옵션은 다음과 같은 것이 있습니다. 이 옵션은 JVM에 주는 부하가 작기 때문에 운영 시스템에 걸어주어 주기적으로 모니터링하는 것도 좋은 방법입니다.
-XX:+PrintGCTimeStamps (GC 발생 시간 정보를 출력)
-XX:+PrintGCDetails (GC 수행 상세 정보를 출력)
-Xloggc:file (GC 로그 파일이름 지정, 이게 없으면 바로 console에 출력됨)
java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log ....
GC 기록을 보자
GC 로그는 다음과 같은 형식으로 나옵니다.
0.590: [GC 896K->278K(5056K), 0.0096650 secs]
0.906: [GC 1174K->774K(5056K), 0.0106856 secs]
1.320: [GC 1670K->1009K(5056K), 0.0101132 secs]
1.459: [GC 1902K->1055K(5056K), 0.0030196 secs]
1.600: [GC 1951K->1161K(5056K), 0.0032375 secs]
1.686: [GC 1805K->1238K(5056K), 0.0034732 secs]
1.690: [Full GC 1238K->1238K(5056K), 0.0631661 secs]
1.874: [GC 62133K->61257K(65060K), 0.0014464 secs]
...
GC 변화를 쉽게(그래프) 보기 위해서 Samurai 를 이용할 수 있습니다. 다음 URL에서 받을 수 있습니다.
이 도구는 GC 기록 뿐만 아니라 thread dump 도 분석하기 쉽게 정리해 보여줍니다. "JVM hang 걸렸을 때 thread dump 남기는 법"을 참조하세요.
'문제발생시' 카테고리의 다른 글
| 극단적인 웹 애플리케이션 성능 향상 방법 (16) | 2009/12/15 |
|---|---|
| 공짜 Java profiler - JIP (웹 애플리케이션 성능 프로파일링-튜닝) (7) | 2009/12/14 |
| GC log를 남기는 법 (0) | 2009/11/27 |
| JVM hang 걸렸을 때 thread dump 남기는 법 (0) | 2009/11/26 |
| Maven release시 SVN 301 에러 (0) | 2009/11/25 |
| 64 bit 우분투 머신에 Continuum 설치하기 (0) | 2009/11/24 |



