J2SE 5.0부터 JVM 상태를 모니터링할 수 있는 기능이 제공된다.
대강 보면 JMX 방식으로 처리되는 것 같고, 메모리를 비롯해 쓰레드, 클래스 로딩까지 볼 수 있어 문제를 찾아내야 할 경우에 꽤 유용하게 사용될 수 있을 것 같다.
WebLogic 같은 경우 8.1에선 콘솔에서 Heap Memory 모니터링 기능이 있어서 사용했는데, 9.0에서는 없어진 것인지 찾을 수가 없었다.
있다 하더라도 지금부터 설명하는 걸로 하면 더 많은 정보를 세세히 살필 수 있으니 신경 안 쓰려고 한다. ㅋㅋ
1. JVM에 자바 옵션 추가
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port={포트번호}
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
☞ 여기서 {port번호}는 외부에서 이 WAS에 접속하기 위한 포트로 보이고, netstat으로 쳐 봐서 사용하지 않는 포트번호를 골라서 사용하면 될듯하다. 대강 10000~15000번에서 고르면 되겠고, 참고로 나는 12000번을 사용했다.
이 옵션을 적용시키려면 이클립스 같은 데서 디버그모드로 WAS를 띄운다면 Server정보의 start탭에 VM Arguments 부분에 붙여 넣으면 되고, 스크립트 방식으로 구동한다면 한 줄로 몰아서 %JAVA_OPTION 변수에 추가시켜 주면 되겠다.
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
-> 위는 jBoss에서 사용한 예
2. 1.에서 적용한 옵션을 적용한 WAS 기동
3. {JDK_Home_Directory}/bin/jconsole.exe를 실행
나는 WAS를 로컬에서 띄워서 그런지 Local탭에 자동으로 인식이 되었고 Connect 버튼을 클릭하면 바로 연결된다.
Remote 탭이 있는 걸 보니 원격의 WAS에도 연결이 가능한 것으로 보이나 테스트를 못 해 봤으니 일단 패스~(나중에 해 보고 추가하겠음)
4. 연결 후 JVM 정보 모니터링
일단 전체적인 내용을 간추려서 보여 준다.
Heap, Non-Heap 별로 모니터링이 가능하고, 오른쪽 아래의 이미지를 클릭하면 그 중에서도 eden, survivors, perm 등등의 영역별로 모니터링을 할 수 있다. Perform GC를 클릭하면 GC도 한 번 시켜 볼 수 있다.
쓰레드 정보도 모니터링이 가능하다.
로딩된 클래스의 수도 확인이 가능하다.
Mbean 정보도 볼 수 있다.
JVM 및 시스템에 관한 정보까지 쭉~ 확인시켜 준다.
돈 주고 비싼 툴 사서 보면 더 좋겠지만, 여건이 안 된다면 이런 것도 도움이 되지 않을까 싶다.