오늘은 tomcat heap memory 확인 및 설정 방법에 대해 포스팅 하겠습니다.
heap memory를 확인하고 설정하는 이유는 tomcat이 실행되다가
GC(Garbage Collector)가 사용하는 heap memory를 모두 사용하여
memory leak 즉 메모리 누수가 발생하기 때문에 heap memory size를 늘려줘야 할 수 있습니다.
tomcat memory 튜닝이라고 보면 되는데 무조건 많이 늘리는 것이 좋지는 않습니다.
사용하는 tomcat service의 정도에 따라 맞추어 tomcat memory를 튜닝해야 합니다.
먼저 tomcat heap memory 확인 방법을 알아보겠습니다.
아래 실행한 명령어 ps -aux | grep tomcat를 입력하여
실행되고 있는 tocmat의 PID값을 확인합니다.
아래의 PID값은 "19371"이라는 것을 확인 할 수 있습니다.
[root@clovirvdi conf]# ps -aux | grep tomcat
tomcat 19371 0.4 12.8 5858076 1032344 ? Sl 10:56 1:55 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/bin/java -Djava.util.logging.config.file=/usr/local/server/apache-tomcat-8.5.13/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xms2048M -Xmx4096M -server -XX:+UseParallelGC -Xms512m -Xmx2048m -classpath /usr/local/server/apache-tomcat-8.5.13/bin/bootstrap.jar:/usr/local/server/apache-tomcat-8.5.13/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/server/apache-tomcat-8.5.13 -Dcatalina.home=/usr/local/server/apache-tomcat-8.5.13 -Djava.io.tmpdir=/usr/local/server/apache-tomcat-8.5.13/temp org.apache.catalina.startup.Bootstrap start
그리고 heap memory를 확인하기 위해
sudo jmap -heap [PID]
또는
jmap -heap [PID]
를 입력합니다.
아래 내용과 같이 heap memory 설정 정보와
현재 사용중인 heap memory 정보를 확인 할 수 있습니다.
[root@clovirvdi conf]# sudo jmap -heap 19371
Attaching to process ID 19371, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 178782208 (170.5MB)
MaxNewSize = 715653120 (682.5MB)
OldSize = 358088704 (341.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 501743616 (478.5MB)
used = 436470536 (416.25074005126953MB)
free = 65273080 (62.24925994873047MB)
86.99075027194766% used
From Space:
capacity = 92798976 (88.5MB)
used = 82657904 (78.82872009277344MB)
free = 10141072 (9.671279907226562MB)
89.07200010482875% used
To Space:
capacity = 106954752 (102.0MB)
used = 0 (0.0MB)
free = 106954752 (102.0MB)
0.0% used
PS Old Generation
capacity = 358088704 (341.5MB)
used = 60366392 (57.56987762451172MB)
free = 297722312 (283.9301223754883MB)
16.85794366749977% used
28398 interned Strings occupying 3288848 bytes.
만약
Heap Usage:
Exception in thread "main" java.lang.reflect.InvocationTargetException
와 같은 오류가 뜬다면 아래 링크를 참고해주세요.
리눅스(Linux)에서 tomcat의 heap memory size를 변경하기 위해서는
설치된 tomcat의 bin 디렉토리안에서 수정을 해야합니다.
vi 편집기로 setenv.sh 파일을 만들고 아래 내용과 같이
min 메모리 사이즈와 max 메모리 사이즈를 입력 후 저장합니다.
export CATALINA_OPTS="$CATALINA_OPTS -Xms256m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx4096m"
vi /var/lib/tomcat/bin/setenv.sh
export CATALINA_OPTS="$CATALINA_OPTS -Xms256m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx4096m"
setenv.sh파일의 권한도 다른 sh파일들과 동일하게 맞추어 줍니다.
chmod와 chown 명령어를 이용하면 됩니다.
ex) chmod 750 ./sertenv.sh
ex) chown tomcat:tomcat ./setenv.sh
이후에 tomcat 서비스를 재기동 하면 위에 확인 방법에서 진행 했던 내용처럼 실행 했을때
변경된 것을 확인할 수 있습니다.
service tomcat restart
지금까지 리눅스(Linux) tomcat heap memory 확인 및 설정에 대한 포스팅이었습니다.
'Develope > Linux' 카테고리의 다른 글
[Linux] 리눅스 쉘 스크립트(shell script) PostgresqlDB query 실행 방법 (0) | 2019.12.13 |
---|---|
[Linux] 리눅스 DNS 설정 방법 (2) | 2019.11.26 |
[Linux] 리눅스 Heap Usage:Exception in thread "main" java.lang.reflect.InvocationTargetException 해결 방법 (0) | 2019.10.21 |
[Linux] 리눅스 scp 원격서버 파일 전송 및 파일 가져오기 (0) | 2019.10.08 |
[Linux] 리눅스 스왑(swap) 파티션 추가 및 영구설정 방법 (0) | 2019.09.12 |