티스토리 뷰

os

tomcat jvm 셋팅하기

littlecarbb 2016. 10. 13. 15:01
GC Tuning을 실제로 시작해보자.

0. 튜닝 순서 
순서는 다음과 같다. 
1) 가용메모리 확인
2)  jvm 프로세스 사용메모리 확인
3)  jvm 내부 메모리 확인및 FC 시간체크
4)  분석후 New 와 Old영역비율 설정. jvm restart 후 하루 지나 다시 모니터링

1. System 전체 메모리 확인
# free 
                       total          used          free     shared    buffers     cached
Mem:       1019556     905732     113824          0      72084     136476
-/+ buffers/cache:       697172     322384
Swap:      4193276     261824   3931452

리눅스에서는 실제 free메모리는 free + cache의 값이다. 그러므로 실제로는 400MB정도가 남아있다. (buffers/cache는 여유메모리를 여러 캐싱의 목적에 사용하는 것이다).전체 1G 중에서 600메가 사용중이고, 400a메가가 남아있다.

2. JVM Tomcat process의 메모리를 확인해 보자
ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 5

너무 길기 때문에 .bash_profile 파일안에 alias설정을 해놓았다.
# vi .bash_profile
alias memory="ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 5"
# source .bash_profile

# memory
USER   PID  PPID     RSS       SIZE        VSZ  %MEM    %CPU         TIME             CMD
root      1300       1 295604 1297740 1400944      28.9          0.3    00:08:27            /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat7/endorsed -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7 -Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrap start
mysql      995     1 170468 843356 888616 16.7 0.1 00:03:29 /usr/sbin/mysqld
root      1634  1497 31932 117960 350632  3.1 1.3 00:32:21 /usr/bin/python ./server.py
root      1500  1499  8480 1282968 1387716  0.8 0.1 00:03:38 /usr/bin/java -jar -Dsolr.solr.home=las start.jar

확인결과 tomcat java가 실제사용중메모리(RSS) 300메가,  최대 alloc되어있는메모리는 1.4기가 정도까지 늘어날수 있게 설정되어있다.


3. JVM내의 new/old 메모리 정보
일단 하루사이에 JVM 정보가 아래와 같이 변했다.

어제)
 jstat -gcutil 1300
  S0        S1    E         O        P           YGC   YGCT    FGC    FGCT     GCT
100.00   0.00  77.03  86.82  98.72    104     0.368     1          0.373      0.741

admin@ubuntu:/usr/local/tomcat7/bin# jstat -gccapacity 1300
NGCMN    NGCMX     NGC     S0C    S1C       EC          OGCMN      OGCMX 
5312.0      169984.0    6912.0  640.0  640.0     5632.0    10624.0       339968.0

OGC         OC          PGCMN    PGCMX      PGC       PC            YGC    FGC
13640.0    13640.0   21248.0    169984.0    24128.0  24128.0    104      1 


오늘) 
jstat -gcutil 1300
 S0         S1    E         O         P          YGC     YGCT    FGC    FGCT     GCT
100.00   0.00  78.30  86.82  98.74    104        0.368    1          0.373      0.741

jstat -gccapacity 1300
NGCMN    NGCMX     NGC     S0C    S1C       EC          OGCMN      OGCMX       
5312.0      169984.0    6912.0  640.0  640.0     5632.0    10624.0       339968.0    
OGC         OC          PGCMN    PGCMX      PGC        PC            YGC    FGC
13640.0    13640.0   21248.0    169984.0    24128.0   24128.0    104      1


4. 현재 GC 확인

원래는 Full GC의 횟수가 많이 증가 했거나 GC시간이 1초 이상이라면 튜닝을 고려해 봐야 하지만,
일단은 많이 사용하는 설정으로 튜닝을 해보자.

현재 내가 test하는 jvm은 아래와 같은 옵션으로 실행된다.
/usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat7/endorsed -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7 -Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrap start

자바의 버전은 1.7이다. 아래와 같이 확인했다.
#  java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-0ubuntu0.12.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

1.7의 default GC는 ParallelGC이다. (-XX:+UseParallelGC)
일단 UseParallelOldGC로 변경하고 메모리 rate를 변경해 보겠다.

Tomcat/bin의 catalina.sh의 JAVA_OPTS를 찾아수정한다.
JAVA_OPTS=-XX:+UseParallelGC -Xms600m -Xmx800m -XX:NewRatio=3

이상태에서 하루정도 있다가 지켜봐야겠다.

5. 하루 지나 확인해보니,
Full GC는 발생하지 않았지만, New GC가 77회 발생했고, 총 6초를 소모했다. 또한 한번의 new GC당 약 60ms를 소모했다.
약간 높은 편이다. 그래도 FullGC가 일어나지 않았으니 크게 문제라고 생각하지 않아 넘어가도록 하자.

참조


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함