YUMSERV
Published 2022. 3. 18. 10:56
Tomcat Memory Leak 설정 LINUX/WEB
반응형

Tomcat 에서 로그를 보면 아래와 같은 에러메시지가 뜹니다.

java.lang.OutOfMemoryError: Java heap space

자바 heap memory가 일시적인 과도한 요구 또는 지속적인 메모리누수로 인해 더 이상 요청한 메모리를 할당할 수 없을 때 발생하는 메시지로, GC에서 메모리를 회수를 못해서 발생하는 건데, 이건 아래 heap memory size 찾아 늘려줄 수 있다.

여기서 GC란 (Garbage Collector)
- Java Appliction에서 사용하지 않은 메모리를 자동으로 수거하는 기능을 말합니다.

주 역할로는

- 메모리할당

- 사용중인 메모리 인식

- 사용하지 않은 메모리 인식

 

 

1. 현재 tomcat pid값 확인

# ps -aux | grep tomcat
tomcat    6052  6.2 10.0 7987608 1625540 ?     Sl   15:07   3:46 //bin/java -Djava.util.logging.config.file=/data/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xmx2048m -Xms2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:ParallelGCThreads=2 -XX:-HeapDumpOnOutOfMemoryError -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /data/tomcat/bin/bootstrap.jar:/data/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/data/tomcat -Dcatalina.home=/data/tomcat -Djava.io.tmpdir=/data/tomcat/temp org.apache.catalina.startup.Bootstrap start

 

2. heap memory 확인

위에서 확인한 pid값을 통해서 heap 메모리 정보를 확인할 수 있다.

# jmap -heap [PID]

# jmap -heap 6052
Attaching to process ID 6052, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2147483648 (2048.0MB)
   NewSize                  = 1073741824 (1024.0MB)
   MaxNewSize               = 1073741824 (1024.0MB)
   OldSize                  = 1073741824 (1024.0MB)
   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 = 786956288 (750.5MB)
   used     = 776871656 (740.8825454711914MB)
   free     = 10084632 (9.617454528808594MB)
   98.71852704479566% used
From Space:
   capacity = 141033472 (134.5MB)
   used     = 54555656 (52.02832794189453MB)
   free     = 86477816 (82.47167205810547MB)
   38.682771704010804% used
To Space:
   capacity = 133693440 (127.5MB)
   used     = 0 (0.0MB)
   free     = 133693440 (127.5MB)
   0.0% used
PS Old Generation
   capacity = 1073741824 (1024.0MB)
   used     = 100825064 (96.1542739868164MB)
   free     = 972916760 (927.8457260131836MB)
   9.39006581902504% used

45272 interned Strings occupying 5029192 bytes.

 

3. heap 메모리 사이즈 변경

Catalina.sh 파일안에, 맨 윗줄에 JAVA_OPTS이 존재합니다.

해당 옵션안에 -Xmx메모리사이즈m -Xms메모리사이즈m 옵션을 통해 변경이 가능합니다.

-Xmx메모리사이즈m : MAX메모리사이즈

-Xms메모리사이즈m : MIN메모리사이즈

ex)
JAVA_OPTS="-Xmx2048m -Xms2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:ParallelGCThreads=2  -XX:-HeapDumpOnOutOfMemoryError "

설정 변경 후 TOMCAT 재시작

 

 

참고 URL)

더보기

http://www.chlux.co.kr/bbs/board.php?bo_table=board02&wr_id=110&page=5

 

반응형
profile

YUMSERV

@lena04301

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!