Programming/JAVA
[JAVA] Tomcat OutOfMemory시 톰캣 자동 재시작
기록하는 백앤드개발자
2020. 12. 17. 08:00
반응형
서비스 운영 중에 톰켓이 OutOfMemory를 뱉어내며 작동을 하지 않을 때가 있다.
APM 시스템이 잘 갖춰진 곳이라면,
시스템의 문제가 발생 시에 바로 알림이 운영자에게 보내져서 바로 대응이 가능하겠지만,
그렇지 않은 경우 문제가 커진 후에나 장애처리가 될 것이다.
예기치 못한 상황에서 자동적으로 시스템을 복구하는 방법이 있다.
JVM옵션에서 이것을 제공하고 있다.
OnOutOfMemoryError 옵션을 이용하면, OutOfMemroy 발생 이후에 특정 동작을 지정할 수 있다.
톰캣 옵션 추가 방법
setenv.sh에 "-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError" 옵션 추가
JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx1024m \
-XX:MaxPermSize=128m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:OnOutOfMemoryError=/home/ec2-user/tomcat/bin/tomcatRestart.sh"
OOME 시 톰캣 재기동 tomcatRestart.sh
#!/bin/sh
kill -9 $(ps aux |awk '/tomcat/ {print $2}')
sleep 2
/home/ubuntu/tomcat/bin/startup.sh
톰켓 강제 중지
CATALINA_OPTS="-Djava.awt.headless=true -server \
-Xms256m -Xmx1024m \
-XX:MaxPermSize=128m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:OnOutOfMemoryError=kill -9 %p"
Heap Dump on OutOfMemoryError
OutOfMemoryError로 인한 JVM에 종료시 Heap Dump를 생성해준다.
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path
-XX:HeapDumpPath를 생략하면 JVM 시작 디렉토리에 java_pid<pid>.hprof형태로 생성된다.
-XX:+PrintClassHistogramAfterFullGC, -XX:+PrintClassHistogramBeforeFullGC 등의 옵션으로 Full GC 전/후의 메모리 상태를 간략히 덤프할 수 있다.
반응형