2013-05-20

JMX через ssh-туннель: подключение JVisualVM к удаленному серверу

Примечания
* Иногда может хватить jmx shell console (один jar-ник, работает на сервере в консоли): http://wiki.cyclopsgroup.org/jmxterm.

* посмотреть слушают ли порты и кто:
linux: netstat -l -p -n
windows: netstat -a -b -n

Настраиваем (X=6 или 7)!
  1. скачать catalina-jmx-remote.jar из tomcat.apache.org/download-X0.cgi - Extras - JMX Remote jar в tomcat/lib
  2. в опциях запуска tomcat (tomcat/bin/catalina.sh или /etc/default/tomcatX) в ключ CATALINA_OPTS/JAVA_OPTS добавляем " -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1 ". Для примера в итоге он может выглядеть так: JAVA_OPTS="-Djava.awt.headless=true -Xmx3400m -XX:+HeapDumpOnOutOfMemoryError -Duser.language=ru -Duser.region=RU -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -XX:+UseCompressedOops -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=127.0.0.1"
  3. в conf/server.xml (там где правим <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443"/>) добавляем <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9098" rmiServerPortPlatform="9099"/>
  4. перезапускаем tomcat, проверяем чистоту логов, проверяем занятость портов
  5. в ssh клиенте для надежности настраиваем туннели на обоих портах ;-), проверяем что порты слушаются локально
  6. подключаемся JVisualVM/JConsole используя JMX url вида: service:jmx:rmi://127.0.0.1:9099/jndi/rmi://127.0.0.1:9098/jmxrmi

Источники
- JMX through a ssh tunnel - http://blog.markfeeney.com/2010/10/jmx-through-ssh-tunnel.html
- Connecting remote tomcat JMX instance using jConsole - http://stackoverflow.com/questions/1263991/connecting-remote-tomcat-jmx-instance-using-jconsole
- http://gabenell.blogspot.ru/2010/04/connecting-to-jmx-on-tomcat-6-through.html