본문 바로가기
WEB&WAS/Apache Tomcat

WAS) Tomcat Instance(JVM) Setting

by LILO 2022. 3. 8.
반응형

INTRO

 

WAS) Tomcat Installation on Linux (Tomcat 설치)

INTRO 앞 글에서 소개한 WAS 제품 중 오픈소스인 Tomcat을 설치하는 가이드를 소개하려고 합니다. WAS) WAS에 대한 이야기 (4) - WAS의 종류 WAS(Web Aplication Server)의 종류 국내에서 많이 사용하는 솔루션을.

lilo.tistory.com

앞 전에 Tomcat을 설치 단계에서 JVM Tuning에 관한 부분은 Default로 진행하였습니다.

운영시에는 수정할 부분이 생길 수도 있으니 많이 사용되는 옵션들을 소개하려고 합니다.

 

그럼 WAS 튜닝은 바로 진행이 가능한가요?

WAS 튜닝을 설치 전부터 미리 값을 정하고 할 수 없습니다.

일단 어느정도 값을 적용하고 성능 테스트를 거치면서 부가적인 값들을 설정하는 방식으로 진행해야됩니다.

이 성능 테스트 역시 기본적인 동접자 및 JVM 성능 테스트인 것이지 실제 사용자들의 Think time까지 정확히 계산하는 것이 불가능에 가깝기 때문에 운영하면서 주기적으로 피드백을 해야됩니다.

 

JVM Options

옵션을 보기 전에 인스턴스라는 용어에 대해 알아보려고 합니다.

WAS에서 인스턴스란 프로그램이 실행되는 프로세스를 말합니다. 즉, WAS가 실행되는 프로세스는 JVM을 뜻하기도 합니다.

 

WAS에서 튜닝이란 JVM에 관한 CATALINA_OPTS, JAVA_OPTS에 대한 옵션에 대한 값을 수정하고 server.xml 등의 설정 파일에서 값을 추가하거나 수정하는 작업입니다.

이 중 CATALINA_OPTS에서 가장 기본적으로 사용되는 옵션만 다룰 예정입니다.

 

변수명 설명
CATALINA_HOME WAS 엔진 경로 설치된 WAS의 엔진 경로
JAVA_HOME JDK 경로 설치된 JAVA 경로
PATH $PATH:$JAVA_HOME/bin:/bin:/sbin 환경변수 설정
CATALINA_OPTS= -server JVM 사용 선언
CATALINA_OPTS= -Xms1024m or -Xms2048m 최소 Heap Memory 크기
CATALINA_OPTS= -Xmx1024m or -Xmx2048m 최대 Heap Memory 크기
CATALINA_OPTS= -XX:MetaspaceSize=512m 최소 MetaSpace(Perm) 크기
CATALINA_OPTS= -XX:MaxMetaspaceSize=512m 최대 MetaSpace(Perm) 크기
CATALINA_OPTS= -XX:+UseG1GC G1GC 사용 (JDK 1.8 이상)
CATALINA_OPTS= -verbose:gc JVM에 대한 GC 기록 남김
CATALINA_OPTS= -Xloggc:${LOG_DIR}/gc.log_`date +%Y%m%d%H%M%S` GC Log 경로 지정
CATALINA_OPTS= -XX:+PrintGCDetails GC 수행 상세 정보 출력
CATALINA_OPTS= -XX:+PrintGCTimeStamps GC 발생 시간 출력
CATALINA_OPTS= -XX:+PrintGCDateStamps GC 발생 날짜 출력 (YYYY-MM-DD)
CATALINA_OPTS= -XX:+HeapDumpOnOutOfMemoryError OOM 발생시 Heapdump 생성
CATALINA_OPTS= -XX:HeapDumpPath=${CATALINA_HOME}/logs/java_pid.hprof Heapdump 경로 지정
CATALINA_OPTS= -XX:+PrintAdaptiveSizePolicy GC 수행 Region 정보 확인 가능

 

이 중 "-XX:+PrintGCDateStamps" 옵션의 경우는 GC 로그 분석기에서 지원하지 않는 경우가 있으니 사용하는 분석기 Documents를 확인할 필요가 있습니다.

 

Heap Memory의 경우 Xms 값에서 부족하여 추가 할당을 받는 현상 발생시 오버헤드 현상이 벌어질 수도 있기 때문에 Xms(최소 Heap Memory)와 Xmx(최대 Heap Memory) 값을 동일하게 주는 것이 좋습니다.

 

MetaSpace 영역은 JDK 1.8 이상에서 많이 사용되고 클래스의 메타데이터를 저장하는 영역을 뜻합니다. 이 부분은 Native 영역이라고도 불리며 OS 레벨에서 관리합니다.

※ Static Object가 Heap Memory 영역으로 빠진 것을 제외하곤 기존의 Perm 영역과 매우 유사합니다.

 

추가로 Memory 할당은 충분한 것 같은데 Memory Leak 현상이 보일 경우 Heap dump를 생성하여 MAT, Jetbrain 등으로 정확한 분석할 필요가 있습니다.

 

 

WAS Instance Setting

Tomcat은 setenv.sh를 이용하고 JBoss의 경우는 env.sh를 이용해 수정합니다.

해당 포스팅은 Apache Tomcat을 기준으로 진행하였습니다.

Heap Memory와 MetaSpace 값은 서버의 메모리 보다 높게 설정하면 OOM이 발생하니 참고 바랍니다.

 

☞ setenv 수정

[root@WAS ~]# vim /apps/tomcat9/bin/setenv.sh
#!/bin/sh

#===========================================================
#Tomcat  Setting
#===========================================================
CATALINA_HOME=/apps/tomcat9
JAVA_HOME=`echo $(readlink -f /etc/alternatives/java) | sed -e 's/\/bin\/java//g'`
PATH=$PATH:$JAVA_HOME/bin:/bin:/sbin
LOG_DIR=$CATALINA_HOME/logs
export JAVA_HOME PATH CATALINA_HOME LOG_DIR


#===========================================================
#JVM Memory Setting
#===========================================================
CATALINA_OPTS="-server"
CATALINA_OPTS="${CATALINA_OPTS} -Xms1024m"
CATALINA_OPTS="${CATALINA_OPTS} -Xmx1024m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MetaspaceSize=512m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MaxMetaspaceSize=512m"


#===========================================================
#GC, Heapdump Setting
#===========================================================
CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseG1GC"
CATALINA_OPTS="${CATALINA_OPTS} -verbose:gc"
CATALINA_OPTS="${CATALINA_OPTS} -Xloggc:${LOG_DIR}/gc.log_`date +%Y%m%d%H%M%S`"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCDetails"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCTimeStamps"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCDateStamps"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+HeapDumpOnOutOfMemoryError"
CATALINA_OPTS="${CATALINA_OPTS} -XX:HeapDumpPath=${CATALINA_BASE}/logs/java_pid.hprof"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintAdaptiveSizePolicy"

 

 

☞ Tomcat 실행

[root@WAS ~]# /apps/tomcat9/bin/startup.sh
반응형