Skip to main content

jmap으로 JVM Heap 상태 점검하기

  • 웹사이트 운영 중 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입니다.
jps 명령어 실행 예시 - Bootstrap PID 확인

2-2) JVM Heap 상태 확인

  • jmap을 사용해 Heap 설정과 각 Generation별 사용 현황을 확인합니다.
# jmap -heap [pid]
jmap -heap 명령어 출력 예시 - Heap 및 Generation 상태
  • Heap 설정과 각 Generation 별 사용현황을 확인할 수 있으며, 만일 Old Generation의 사용량이 지속적으로 증가한다면 memory leak을 의심할 수 있습니다.

2-3) 클래스별 객체 수와 메모리 사용량 확인

  • -histo 옵션을 사용하면 조금 더 상세한 클래스별 객체 수와 메모리 사용량을 확인할 수 있습니다.
# jmap-histo:live [pid] | more
jmap -histo:live 명령어 출력 예시 - 클래스별 객체/메모리 사용량
  • 참고: 명령 실행이 되지 않을 경우 공백을 포함해 다음처럼 입력해 보세요.
# jmap -histo:live [pid] | more
  • 주기적으로 클래스별 객체 수와 메모리 사용량 등을 체크해 보면 어느 클래스에서 누수가 되는 것인지 대략적으로 알 수 있습니다.
  • 다만, 어느 부분에서 누수가 유발되는 것인지 자세한 부분은 jmap만으로는 알 수 없으며, heap dump를 받아 분석해야 합니다.