JVM Thread & Memory Monitoring

JVM 위에서 실행되는 프로세스의 메모리 사용량 Monitoring 에 대해 정리한다.

우선 사용되는 툴에 대한 간략한 정리
JPS - Java Process Status, JVM에서 실행되고있는 프로세스의 목록을 확인할 수 있다.
JMAP - JVM에서 실행되고있는 프로세스의 메모리 사용량을 확인할 수 있다.

0. Monitoring 할 프로세스 ID 확인
  • jps 실행 후 이름을 보고 프로세스 ID를 확인한다.
  • -l 옵션을 사용하면 패키지명까지 볼 수 있다. 이외에도 옵션이 있다.



1. 객체 별 메모리 사용량 확인
  • jmap -histo [processID]
  • 목록이 길 경우 파이프를 이용하면 유용하다.
    • ex) jmap -histo 999 | head
    •       jmap -histo 999 | tail
    •       jmap -histo 999 | grep 'mypackage'
    •       jmap -histo 999 | grep 'mypackage' | head


2. Heap 사용량 확인
  • jmap -heap [processID]
  • Max, used, free 등을 space 별로 확인할 수 있다 [2].

* 주의점
  • JMAP -heap 을 사용할 경우, 프로세스를 실행시킨 사용자와 같은 사용자가 아니면 프로세스에 attach 할 수 없다.

3. Thread dump
  • jstack [processId]
  • jstack을 실행하는 시점의 thread stack trace가 가능하다.
  • 파일로 저장하여 확인하고자 한다면,  shifter를 사용하면 간단하다.
    • jstack [processId] >> thread.dump



Reference
[1] Spring Boot Memory Performance, https://spring.io/blog/2015/12/10/spring-boot-memory-performance
[2] JAVA Heap 메모리 모델, http://lyb1495.tistory.com/3

댓글

이 블로그의 인기 게시물

Cocos2d-x Scene 전환 방법

GUI for Redis : Medis