Eclipse에서 VisualVM 사용하기


자바 어플리케이션을 개발하고, 서버에 배포해서 운영을 합니다. 처음에는 정상적으로 운영하다가
시간이 지날수록 갑자기 서버에 응답이 없거나, 느려지거나.. 심지어 서버가 “Shutdown
되는 경우가 있습니다.

이러한 증상의 원인을 찾기란 쉽지 않습니다.
이유는 경우에 수 (“네트워크”, “리소스 부족”,”DB, File I/O”, “잘못된 Server 설정”.. 등)가
다양하기 때문 입니다.

인프라 에 의한 장애” 또한 원인을 찾기가 쉽지 않지만, “어플리케이션 그자체“에서
문제가 발생할 경우는 정말 원인을 파악하기가 어렵습니다.
특히나 “현재 서비스 중“인 경우는 상당히 난감한 상황에 처할수 있습니다.
물론 “log file“를 통해서 원인을 찾을수 있지만, 로그 파일은 주로 “logical error”
에 대한 부분이 많고, 어플리케이션 core인 “JVM” 까지 원인을 잡기에는 한계가 있습니다.

저도 사실은 예전에는 개발할때 “위에서 언급한“내용에 대해서 크게 신경쓰지 않고,
개발을 했고, 문제가 생기면 “Heap” 사이즈를 높여주는 선에서 처리를 했었습니다.
하지만 최근 IT 환경변화로 인해서 예전보다 훨씬 많은 “heavy한 로직(리소스 사용을 많이한)
들이 늘어 나고 있습니다.

“JSON 파싱, XML 파싱, Remote 파일 전송, 캐싱, 로그 파일 저장,
Object 마샬링/언마샬링, Shared Data, Session Data,
Recursive Logic, 많은 수의 HTTP Request,
OpenSource 내부에서의 Heavy한 로직  등..”

또한 “안드로이드 개발“같이 “리소스“를 최적화 해야하는 경우에도 해당이 됩니다.
그래서 자바 개발자라면 전문가 수준은 아니지만 기본적인 “JVM“에 대해서
조금씩 관심을 가져야 할것 같습니다.

JVM“의 내부를 분석을 하기 위해서 다양한 “tool“들이 제공 됩니다.
유료, 무료 둘다 많이 있지만 그중에서 “무료로 배포“하는 것들이 있습니다.
그중에서 대표적인 것이 “jconsole“, “VisualVM“, “AppDynamics” 등이 있습니다.

위의 3개의 tool에 대한 비교는 아래의 링크를 참고 하시면 됩니다.
Application Monitoring with JConsole, VisualVM and AppDynamics Lite
간략 하게 말씀 드리면 “개발자” 같은 경우는 “Bottom-Up” 으로 어플리케이션을
trace 하기 때문에 “jconsole, VisualVM“이 좋고, “운영팀” 같은 경우는
시스템 전반적인 dash board” 같은 “Top-Down” 방식으로 trace를
하기 때문에 “AppDynamics“를 추천 드립니다.

본 포스팅은 그중에 하나인 “VisualVM“에 대해서 설치 방법 및 “이클립스“에서
본인이 작성한 어플리케이션을 구동시 “VisualVM” 과 연동 하는 방법에
대해서 말씀 드리겠습니다.

(1) 테스트 환경 및 설치 순서

– 제가 테스트 했던 환경은 아래와 같습니다.

OS : Windown 7 for 32bit
JDK : 1.6.0_30 for 32bit
Eclipse : Juno Release

– 설치 순서는 아래와 같습니다.

“VisualVM 설치” – “이클립스 VisualVM 플러그인 설치” – “이클립스 preferences 설정”
 – “Run/Debug Configure 설정”

(2) VisualVM 설치하기

※ 반드시 사전에 “JDK 1.6+” 이상이 설치가 되어 있어야 합니다.

– 아래의 사이트에 접속해서 최신 버전을 다운로드 합니다.
http://visualvm.java.net/download.html

– 다운로드 받은 “압축파일“을 해제 합니다.
※참고로 저는 “C:\EEProject\visualVM”에 설치를 했습니다.

– 설치된 “디렉토리/bin/visualvm.exe” 파일을 실행 합니다.

– 실행을 하면 “VisualVM” 화면이 나옵니다. 아래 화면은 현재 제 로컬에 실행 되어 있는
이클립스의 JVM 모니터링 상태” 입니다.

(3) Eclipse 플러그인 설치 하기

– 아래의 사이트에 접속해서 “이클립스 버전“에 맞는 플러그인을 다운로드 합니다.

http://visualvm.java.net/eclipse-launcher.html

– 다운로드 받은 파일을 “압축 해제” 합니다.

– 이클립스를 구동 후 , “Help” – “Install New Software..“를 선택 합니다.
Install” 창이 나오면 “우측상단 “Add..” 버튼을 선택 합니다.

–  “Add Site“창에 “Name“은 “VisualVM“로 작성하고, “Location“은
압축 해제된 디렉토리 경로“를 선택을 합니다.
※기본적으로 “Location”은 “URL”정보를 입력 하지만 지금은 로컬에 있는
플러그인을 설치하기 때문에 반드시 “우측 상단 Local…” 버튼을 선택해서 지정해야 합니다.

– 설치할 플러그인 정보를 “체크“하시고 계속 설치를 진행 합니다.
※ 만약 설치시 오랫동안 “진행바” 가 반응이 없으면 “취소”하고, 
“Contact all update sites during install to find required software”
옵션을 “체크 해제”하시고 다시 설치하시면 됩니다.

(4) Preferences 설정 하기

여기까지 진행을 하셨으면, 기본적인 설치는 다 완료가 되었습니다. “이제는 플러그인 과 
VisualVM 간의 설정만 남았습니다.

– “Preferences” – “Run/Debug” – “Launching‘ – “VisualVM Configuration“을 선택합니다.

VisualVM Executable” : “visualvm.exe“의 경로를 설정 합니다.
JDK Home” : “현재 설치된 jdk“의 경로를 설정 합니다.

(5) Java 실행 하기

– 실행하고자 하는 “.java“파일 선택하고, “Run Configuration…“을 선택 합니다.

– “Select one..” 를 선택을 합니다.

– “Launcher” 를 “VisualVM“으로 설정하고 “실행“을 합니다.

– 실행을 하게되면 자동으로 “VisualVM” 창이 실행 됩니다.
왼쪽 창은 실행 “콘솔” 화면이고, 오른쪽은 “VisualVM” 화면 입니다.
오른쪽 화면을 보면 “지금 실행된 JVM“에 대한 정보를 모니터링 할수 있습니다.

– 또한 “웹 어플리케이션 작성시 로컬 Tomcat JVM“도 모니터링 할수 있습니다.

Conclusion

JDK“에서 기본적으로 제공하는 “jconsole” 보다, 좀더 다양한 기능을 제공하는 “VisualVM
설치를 말씀 드렸습니다.
Thread Dump, Old, Eden, Heap, Permgen..” 등 다소 어려운 용어들이 나옵니다.
그렇다고 너무 좌절할 필요는 없을 것 같습니다.
현재 나의 “어플리케이션“이 “CPU“, “메모리“, “GC 반환여부” 등은 그래프로 쉽게 확인이 가능하며,
이것만 해도 “상당히 큰 health checking” 입니다.
나머지 부분은 한번에 이해하시지 말고, “Run and Learning” 하면서 조금씩 알아 나가시면 될것 같습니다.

“JVM” 모니터링을 통해서 robust  java application을 만드셨으면 합니다.🙂

※ 참고자료

http://visualvm.java.net (VisualVM)
http://t.co/F1fP3nAY (JVM 모니터링 툴 비교)
http://helloworld.naver.com/helloworld/6043 (Garbage Collection 모니터링 방법)
http://helloworld.naver.com/helloworld/37111 (Garbage Collection 튜닝)
http://t.co/lc0NvfkG (Apache MaxClients와 Tomcat의 Full GC)
http://t.co/Pysf9rAb (유용한 자바 옵션들)
http://www.javacodegeeks.com/2012/03/jvm-how-to-analyze-thread-dump.html (How to analyze Thread Dump)
http://t.co/Qyv2cFxE (Diagnosing Your Application on the JVM)

Published by: beyondj2ee

Past SI AA, now I am pikicast developer in yellow mobile and daddy, Java, Spring, OpenSource, Application Architect :) Java Application Architect. mail : beyondj2ee@gmail.com twitter : twitter.com/beyondj2ee facebook : https:www.facebook.com/beyondj2ee blog: http:beyondj2ee.wordpress.com

Categories Architecture댓글 한 개

One thought on “Eclipse에서 VisualVM 사용하기”

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중