tomcat을 운영하다 보면 메모리 사용량이나 쓰레드 및 vm 내부의 정보를 알아야 하는 경우가 발생한다
쉽게 모니터링을 할 수 있게 JMX ( Java Management Extensions )를 제공한다.
tomcat 버전에 따라 jmx-remote.jar 파일이 있으니 tomcat 버전에 맞는 파일을 다운로드 하면 된다
1. 현재 서버의 tomcat 버전은 8.5.x 버전이다 웹사이트 아래 주소에서 다운로드를 진행하면 된다
https://tomcat.apache.org/download-80.cgi
2. 해당버전에 맞는 jmx_remote.jar 파일을 tomcat lib 폴더에 복사해주면 된다.
1 2 3 |
[root@localhost ~]# wget http://mirror.apache-kr.org/tomcat/tomcat-8/v8.5.35/bin/extras/catalina-jmx-remote.jar [root@localhost ~]# cp -a catalina-jmx-remote.jar /usr/local/tomcat/lib/ |
3. 환경설정 파일을 만들어 추가한다. tomcat/bin 폴더에 setenv.sh 파일을 만들어 아래 내용을 추가한다
1 2 3 4 5 6 7 8 9 10 |
[root@localhost ~]# vi /usr/local/tomcat/bin/setenv.sh #!/bin/sh JMX_OPTS=" -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname=192.168.0.11 \ -Dcom.sun.management.jmxremote.ssl=false " CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}" |
Dcom.sun.management.jmxremote.authenticate=false : 인증을 사용하지 않는다
Djava.rmi.server.hostname=192.168.0.11 \ —> 서버의 IP를 입력
Dcom.sun.management.jmxremote.ssl=false —> SSL 미사용
4. server.xml 파일에 아래 내용을 추가한다.
1 2 3 4 |
[root@localhost ~]# vi /usr/local/tomcat/conf/server.xml <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9840" rmiServerPortPlatform="9841"/> |
외부에서 모니터링을 하려면 해당 포트가 open되어 있어야 하니 9840 9841 포트 tcp 포트를 허용해 준다.
tomcat을 재시작 해주고 해당 포트가 올라왔는지 체크한다.
1 2 3 4 5 6 7 8 9 10 11 |
[root@localhost ~]# catalina.sh stop [root@localhost ~]# catalina.sh start [root@localhost ~]# netstat -anp | grep java tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 38166/java tcp 0 0 :::33893 :::* LISTEN 38166/java tcp 0 0 :::8009 :::* LISTEN 38166/java tcp 0 0 :::9840 :::* LISTEN 38166/java tcp 0 0 :::8080 :::* LISTEN 38166/java tcp 0 0 :::9841 :::* LISTEN 38166/java |
5. 윈도우 java가 설치되어 있다면 Jconsole 프로그램이 존재한다 해당 프로그램을 실행하면 다음과 같이 서버의 아이피 및 포트를 입력하고 Connect를 클릭
Secure Connection failed. Retry 메시지가 나타나는것은 SSL 통신이 아니기 때문인데 무시하고 Insecrue connection 을 클릭
6. 다음과 같이 JMX 관리 창이 나타나며 VM 관련된 정보를 확인 할 수 있다
7. JMX 모니터링에 아이디 패스워드를 이용하여 인증하는 방법이다. (추천)
1 2 3 4 5 6 7 8 9 10 |
[root@localhost ~]# vi /usr/local/tomcat/bin/setenv.sh JMX_OPTS=" -Dcom.sun.management.jmxremote \JMX_OPTS=" -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.authenticate=true \ -Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password \ -Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access \ -Djava.rmi.server.hostname=192.168.0.11 \ -Dcom.sun.management.jmxremote.ssl=false "CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}" |
유저파일 jmxremote.access 파일과 패스워드 파일인 jmxremote.password 파일을 생성해준다.
1 2 3 4 5 6 7 8 |
[root@localhost ~]# vi /usr/local/tomcat/conf/jmxremote.access jmxadmin readonly [root@localhost ~]# vi /usr/local/tomcat/conf/jmxremote.password jmxadmin jmxadmin1234 |
사용자 아이디는 : jmxadmin 이며 jmxadmin 패스워드는 jmxadmin1234 이다
8. tomcat restart
1 2 3 |
[root@localhost ~]# catalina.sh stop [root@localhost ~]# catalina.sh start |
9. jconsole을 구공하고 아이피와포트 및 사용자 정보를 입력한다.