IT이것저것
JAVA 또는 Tomcat JVM Heap 상태 확인하기
ktko
2018. 11. 27. 20:57
먼저 tomcat의 heap 변경을 위해서는 JVM 구조를 알아야 하고 기본적인 New, Old Generation 과 같은 개념을 알아야 한다. 블로그에 JVM에 대한 포스팅이 있으니 먼저 확인하고 읽길 바란다.
아래명령어로 자바 또는 톰캣의 프로세스 ID를 가져와야 한다.
1 2 | ps -ef | grep java ps -aux | grep tomcat |
프로세스 아이디를 아래와 같이 입력하면 JVM 상태를 알 수 있다.
1 | jmap -heap [pid] |
만약 Old Generation의 사용량이 지속적으로 증가한다면 memory leak을 의심해봐야 한다.
New Generation, Old Generation으 비율은 기본 1:2이다. New, Old 비율은 업무 특성을 고려하여 적절하게 변경해야한다. 가급적 Old Generation으로 이동을 최소화하는 것이 좋기 때문에 New를 늘리는 방안을 생각할 수 있지만 그렇게 되면 역으로 Old의 부족으로
아래 명령어로 클래스별 객체 수와 메모리 사용량을 확인할 수 있다.
1 | jmap -histo:live [pid] | more |
주기적으로 클래스별 객체 수와 메모리의 사용량을 체크하는지 알 수 있다. 하지만 어디에서 누스를 일으키는지는 jmap 만으로는 알 수 없고, heap dump를 떠서 분석해야 한다.