2009. 8. 21. 10:23

[JavaTool] 유용한 자바툴 - jvisualvm

들어가며...

이전 포스트에서 JDK에서 기본으로 제공되는 유용한 툴인 jps, jmap, jhat에 대해서 간략하게 소개했다. 그리고 GUI 기반의 JVM 모니터링 툴인 jconsole을 소개했다. jconsole은 JMX를 사용하여 JVM을 실시간으로 모니터링이 가능하지만, 다소 투박한 UI와 heap 메모리에 올라가 있는 live 객체들을 볼 수 없고 요약된 정보만 보여준다는 점이 단점이다.

jvisualvm
http://java.sun.com/javase/6/docs/technotes/tools/share/jvisualvm.html
http://java.sun.com/javase/6/docs/technotes/guides/visualvm/index.html

이번에 소개할 jvisualvm 은 jconsole과 마찬가지로 JMX를 사용하여 로컬호스트 또는 원격호스트의 JVM을 실시간으로 모니터링하는 툴이다. jvisualvm은 JDK 6 부터 포함되었고, jconsole에 비해 훨씬 고급스러운(?) UI를 보여준다.


<jconsole의 투박한 UI에 비해 훨씬 나아진 UI를 보여준다.>


그리고 jvisualvm은 자바툴 소개 페이지(http://java.sun.com/javase/6/docs/technotes/tools/)에서 소개하고 있는 바와 같이 기본적인 모니터링 외에도 쓰레드 덤프 및 heap 덤프를 분석하는 기능도 포함하고 있다. 만약 로컬호스트의 JVM을 모니터링 중이라면 이 툴을 이용해서 바로 쓰레드 덤프 및 heap 덤프를 생성해서 볼 수도 있다.


특히 heap 덤프 분석 기능에서는 앞서 소개한 jhat 이나 jconsole, IBM의 HeapAnalyzer가 매우 큰 용량의 heap 덤프 파일은 처리하지 못하는 반면, jvisualvm은 처리가 가능하다.

보통 32비트 환경을 가정할 때 최대 힙 사이즈를 1~2GB로 두는 것이 보통이다. (JVM의 -Xmx2048m 옵션, 32비트 머신에서 JVM은 최대 힙 사이즈를 2G 넘게 설정할 수 없다.) 이러한 환경에서 OutOfMemoryError (이하 OOME) 발생 후 heap 덤프를 생성하게 되면 덤프파일이 보통 2G는 훌쩍 넘게 되는데, 이렇게 생성된 덤프파일을 jhat이나 jconsole, HeapAnalyzer 등을 사용해 분석하고자 하면 분석툴 자체에서 OOME가 발생하는 진풍경을 보게 된다.

하지만 jvisualvm 으로 약 1GB의 heap 덤프 파일을 분석해본 결과 시간은 오래 걸리지만 분석결과가 잘 나오는 것을 확인할 수 있었다. 그리고 jconsole에서 볼 수 있는 요약정보 뿐만 아니라 jhat과 같이 live 객체 목록 정보도 보여준다.

<jhat 처럼 클래스 및 인스턴스 목록도 볼 수 있다.>


정리하자면 jvisualvm은 jconsole과 jhat을 합쳐놓은 듯한 툴이고, jconsole보다 더 괜찮은 UI를 제공한다.
이 글에서는 툴에 대해 아주 간략하게 설명했지만, 각종 플러그인도 제공되고 있으니 더욱 막강한 기능들이 있을 것으로 생각된다.


관련글
2009/08/12 - [테크 노트 (Tech Note)] - [JavaTool] 유용한 자바툴 - jconsole
2009/08/10 - [테크 노트 (Tech Note)] - [JavaTool] 유용한 자바툴 - jps, jmap, jhat


Trackback 0 Comment 0