- 웹사이트 운영 중 OOM(Out Of Memory)으로 Tomcat이 비정상 동작할 수 있습니다.
- JVM Heap 상태 확인은 jmap 활용을 권장드립니다.
- 절차 요약: 1) jps로 PID 확인 → 2) jmap -heap으로 Heap 상태 확인 → 3) jmap -histo:live로 클래스별 메모리 점검
- Old Generation이 지속적으로 증가하면 메모리 누수를 의심하세요. 상세 원인은 heap dump 분석이 필요합니다.
1. 개요
- 가끔 웹사이트 운영 시 OOM(Out Of Memory)가 발생하여 tomcat이 정상동작을 하지 않는 경우가 있습니다.
- JVMheap 상태를 확인해 보시려면 jmap을 활용하여 점검하실 수 있습니다.
-
jmap을 활용한 모니터링을 권장드립니다.
2. 단계별 점검 방법
2-1) 실행 중인 Tomcat 프로세스 ID(PID) 확인
- 실행 중인 tomcat 프로세스 id 확인을 위해 jps 명령을 실행합니다.
# jps
- Bootstrap의 id값이 tomcat 프로세스 id입니다.
2-2) JVM Heap 상태 확인
- jmap을 사용해 Heap 설정과 각 Generation별 사용 현황을 확인합니다.
# jmap -heap [pid]
- Heap 설정과 각 Generation 별 사용현황을 확인할 수 있으며, 만일 Old Generation의 사용량이 지속적으로 증가한다면 memory leak을 의심할 수 있습니다.
2-3) 클래스별 객체 수와 메모리 사용량 확인
- -histo 옵션을 사용하면 조금 더 상세한 클래스별 객체 수와 메모리 사용량을 확인할 수 있습니다.
# jmap-histo:live [pid] | more
-
참고: 명령 실행이 되지 않을 경우 공백을 포함해 다음처럼 입력해 보세요.
# jmap -histo:live [pid] | more
- 주기적으로 클래스별 객체 수와 메모리 사용량 등을 체크해 보면 어느 클래스에서 누수가 되는 것인지 대략적으로 알 수 있습니다.
-
다만, 어느 부분에서 누수가 유발되는 것인지 자세한 부분은 jmap만으로는 알 수 없으며, heap dump를 받아 분석해야 합니다.