2013.09.26

이주현 (lee@embian.com, leejuhyeon@gmail.com)



I. 서설

 Java VisualVM(이하 VisualVM이라 한다)는 실행 중인 java 프로세스의 상태를 모니터링할 수 있는 좋은 도구이다. 이는 Oracle JDK에 포함되어 있으며, JDK 설치위치의 bin 디렉토리에 jvisualvm이라는 이름으로 존재한다.


 VisualVM은 로컬(VisualVM이 작동되는 머신과 동일한 머신)에서 실행 중인 java 프로세스 뿐만 아니라, 원격(VisualVM이 작동되는 머신과 상이한 머신)에서 실행 중인 java 프로세스 역시 모니터링할 수 있다.

 원격 모니터링의 경우, jstatd*[각주:1] 또는 JMX[각주:2]를 이용하는 두가지 방식을 제공하는데, JMX를 이용하는 것이 더 간단하고, 기능도 많다.


 이 글에서는 JMX를 활용하여 원격호스트의 java 프로세스를 모니터링하는 방법을 설명하고자 한다.




II. 환경설명

 다음과 같이 원격호스트와 로컬호스트가 존재하고, 원격호스트에서 실행 중인 Test라는 java 프로그램의 상태를 로컬호스트에서 VisualVM을 통하여 모니터링하기로 한다.






III. 방법


1. 원격호스트에서 실행될 Test.class 프로그램을 다음과 같은 환경변수와 함께 실행시킨다.




여기서 jvm 파라미터들은 다음과 같다.

-Djava.rmi.server.hostname=<원격호스트의 주소>

-Dcom.sun.management.jmxremote.port=<jmx프로토콜로 접속할 port번호>

-Dcom.sun.management.jmxremote.ssl=<ssl 사용여부>

-Dcom.sun.management.jmxremote.authenticate=<인증사용 여부>

* 여기서 인증사용 여부 등을 true로 하게 되면, jre 측에 별도의 보안 설정 등을 필요로 한다. 내부망이고 별도의 보안 정책이 없는 경우라면, 인증사용을 하지 않아도 충분하다.



2. 로컬호스트에서 VisualVM을 실행한다.



그러면 아래와 같이 VisualVM이 실행된다.





3. Visual VM에서 remote 접속을 수행한다.

 

 화면의 Applications 탭에서 Remote를 클릭하면, "Add Remote Host"라는 팝업이 뜬다. 이 팝업의 "Host name"에 원격호스트의 주소를 적어주고, OK 버튼을 누른다. (여기서는 원격호스트의 주소는 192.168.0.53이라고 가정한다)






그러면, 원격호스트가 Remote 항목 밑에 표시된다.



해당 원격호스트 항목에서 마우스 오른쪽 버튼을 클릭해서 "Add JMX Connection"을 선택한다.



 새로 열린 팝업 메뉴의 "Connection" 란에 원격호스트의 IP와 Port 번호를 적어준다. (본 예제의 원격호스트에서  java 프로세스를 실행할 때 지정한 JMX 포트 번호는 3333)



 그러면, Applications 탭에 원격호스트의 java 프로세스가 등록된 것이 보일 것이다.




 이제 해당 원격 프로세스 표시를 더블클릭하자. 그러면 다음과 같이 해당 java 프로세스의 상태가 표시될 것이다.




4. 이제 원격 java 프로세스의 상태를 모니터링한다.


아래와 같이 "Overview", "Monitor", "Thread", "Sampler" 등의 탭을 통하여 원격호스트 상의 java 프로세스의 상태를 모니터링할 수 있다.







IV. 결론

 원격호스트의 java 프로세스 상태를 모니터링함에 있어 jstatd를 사용하는 방법은, 별도의 rmiregistry를 기동하여야 하는 등 약간 귀찮은 면이 있다.

 이에 비하여 JMX를 활용하여 모니터링 대상의 JVM에 직접 접속하는 방법은 별도의 감시 데몬(jstatd)를 필요로 하지 않으면서도, 오히려 jstatd를 사용할 경우보다 다양한 기능(예를 들어 Heap Dump 등)을 제공하는 장점이 있다.



  1. java 프로세스의 상태를 감시하는 프로그램인 jstat의 데몬 버전 [본문으로]
  2. Java Management Extension [본문으로]
Posted by 쿨링팬
,