JVM heap 모니터링은 어떻게 하나요?
💡 요약 정리
- jmap을 활용한 JVM heap 모니터링을 권장합니다.
-
- jps로 Tomcat PID 확인 → 2) jmap -heap으로 힙/세대별 현황 확인 → 3) jmap -histo:live로 클래스별 사용량 확인.
- Old Generation 사용량이 계속 증가하면 메모리 누수를 의심하세요.
- 상세 원인 파악은 jmap만으로는 어렵고, 힙 덤프를 받아 별도 분석이 필요합니다.
가끔 웹사이트 운영 중 OOM(Out Of Memory)이 발생하여 Tomcat이 정상 동작하지 않는 경우가 있습니다. 이때 JVM heap 상태를 확인하려면 jmap을 활용해 점검할 수 있습니다.
1. Tomcat 프로세스 ID(PID) 확인: jps
- 실행 중인 Tomcat 프로세스 ID를 확인하려면 다음 명령을 실행합니다.
# jps
- 출력에서 Bootstrap의 id 값이 Tomcat 프로세스 ID입니다.
- jps 결과 예시 화면입니다. Bootstrap 옆 숫자가 Tomcat PID입니다.
2. JVM Heap 상태 확인: jmap -heap
- 확인한 PID로 JVM 힙 상태를 조회합니다.
# jmap -heap [pid]
- Heap 설정과 각 Generation(Young/Old)별 사용 현황을 확인할 수 있습니다.
- Old Generation 사용량이 지속적으로 증가한다면 메모리 누수(memory leak)를 의심할 수 있습니다.
3. 클래스별 객체/메모리 사용량 확인: jmap -histo
- 클래스별 객체 수와 메모리 사용량을 더 자세히 보려면 -histo 옵션을 사용합니다.
# jmap -histo:live [pid] | more
참고: 일반적으로는 다음처럼 공백을 포함해 사용합니다: jmap -histo:live [pid] | more
- 주기적으로 클래스별 객체 수와 메모리 사용량을 체크하면, 어느 클래스에서 누수가 발생하는지 대략적으로 파악할 수 있습니다.
추가 안내
- 어느 부분에서 누수가 유발되는지에 대한 정확한 원인은 jmap만으로는 알 수 없습니다. heap dump를 받아 별도 분석이 필요합니다.