GC (Garbage Collection) 과 로그수집 Enjoy/JAVA2011. 9. 23. 10:15
GC (Garbage Collection) 과 로그수집
GC (Garbage Collection)
GC 는 minor GC, full GC 로 나뉘어 진다.
Full GC 시는 모든 프로세스를 holding 된다 즉 Full GC 동안은 response 하지 않으므로 Full GC 시간을 줄이는 것이 성능 향상에 매우 중요함
GC를 알기 위해서는 첨부된 문서를 반드시 먼저 숙지
첨부해도 되는 문서인지는 모르겠으나 구글링 중 가장 잘 정리되어 있는 문서이기에 첨부합니다.
작성하신 조병욱님 정말 감사합니다.
반드시 알아야 할 것
- JVM 메모리는 크게 New/Young - Old 영역으로 GC는 Minor GC 와 Full GC 로 나누어 지며
- Minor GC는 New/Young 영역의 메모리를 확보하는 작업
- Full GC는 Old 영역의 메모리를 확보하는 작업. Full GC 처리 시간을 줄이는 것이 메모리 튜닝의 핵심
- GC 알로리즘은 4개이며 각각의 환경 ( H/W 지원 등)에 맞게 JVM 옵션을 통해서 알고리즘을 선택 가능
- 전체 메모리에서 New/Young 영역의 비율을 늘리면 minor GC , Full GC 의 횟수를 줄일 수 있지만 Full GC 소요시간은 동일
GC 로그 수집
GC를 튜닝하기 위해서는 가장 중요한 것은 역시 로그 수집
Jvm 옵션을 통하여 GC 로그를 수집
옵션에서 특별히 파일을 지정하지 않을 경우는 콘솔에 로깅됨 (예 톰켓 : $CATALINA_HOME/logs/catalina.out)
-verbosegc : GC 로깅 처리하겠다.
-verbosegc : GC 로깅 처리
-XX:+PrintGCDetails : Detail 하게 로깅
-XX:+PrintGCTimeStamps : 시간도 로깅에 포함
-XX:+PrintHeapAtGC : GC 발생 전후의 Heap에 대한 정보를 상세하게 기록
JVM 옵션 지정 예 (톰켓)
# vi /usr/local/tomcat/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -verbosegc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC"
웹 APP 인 경우는 반드시 JVM 옵션에 "-server" 를 추가 (default : -client) 한다.
-server 옵션을 추가 했을 경우 New/Young : Old = 1:2 크기로 자동 셋팅
Default는 1:8 이므로 -server 옵션을 추가 해 주는 것만으로 New/Young 영역이 늘어나 GC 횟수를 줄일 수 있다.
JAVA_OPTS="$JAVA_OPTS -server"
JVM에서 Full GC는 최소 1시간 마다 1회씩 주기적으로 수행 (JDK_1.6 이상)
참고 URL
GC 관련 게시물 : http://www.javaservice.net/~java/bbs/read.cgi?m=etc&b=jdk&c=r_p&n=1152321260
JVM Option : http://wiki.ex-em.com/index.php/JVM_Options