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

WAS) HugePage(Large page) 설정 및 확인 방법

by LILO 2022. 10. 23.
반응형

INTRO

JVM을 실행하면서 Large Page를 사용하는 경우가 극히 드물긴 하지만 TLB 누락 수가 늘어날 때 성능 저하 현상이 나타날 수도 있기 때문에 Large Page를 사용하기도 합니다.

 

이의 경우 OS Level에서 Hugepage를 설정하고 JVM에서도 Large Page(Huge Page)를 사용하는 설정을 해야됩니다.

OS에서 Huge Page 설정하는 방법은 아래의 링크를 참고 부탁드립니다.

 

Linux) Hugepages 설정

INTRO DB, DPDK 등 Application을 설치하기 전 OS에 Hugepage를 설정하여 Application의 성능 저하를 막거나 성능 향상을 위해 Hugepage 설정을 하기도 합니다. 리눅스의 경우 영구 적용을 위해 몇가지의 방법이..

lilo.tistory.com

 

 

JVM Large Page 설정 추가

설정하는 방법은 Tomcat 기준으로 setenv.sh 파일이나 catalina.sh 파일에 "-XX:+UseLargePages" 옵션만 추가해주면 됩니다.  (JBoss에서는 env.sh 혹은 xml 파일 수정이 필요)

# vi /app/tomcat9/bin/setenv.sh


#!/bin/sh

#===========================================================
#Tomcat  Setting
#===========================================================
CATALINA_HOME=/app/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} -Xms2048m"
CATALINA_OPTS="${CATALINA_OPTS} -Xmx2048m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MetaspaceSize=1024m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MaxMetaspaceSize=1024m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseLargePages"


#===========================================================
#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을 기동합니다.

# /app/tomcat9/bin/startup.sh

 

HugePage 사용량을 확인합니다.

<HugePage 사용량 확인>
# grep HugePages_ /proc/meminfo
HugePages_Total:      70
HugePages_Free:       68
HugePages_Rsvd:        0
HugePages_Surp:        0


# numastat -cm |egrep -i "total|hugepages_"
                 Node 0 Node 1  Total
MemTotal          79500  64464 143964
HugePages_Total   35840  35840  71680
HugePages_Free    35840  33792  69632
HugePages_Surp        0      0      0

 

 

JVM Large Page 사용하지 않게 설정

 

만약 Hugepage를 사용하여 WAS를 기동하면 안되는 환경에서  "-XX:+UseLargePages" 옵션을 추가하지 않았는데 Hugepage가 사용되고 있다면 "-XX:-UseLargePages" 옵션을 추가하여 기동하면 JVM이 HugePage 사용하는 것을 방지할 수 있습니다

반응형