web-dev-qa-db-ja.com

visualvmとJMXを使用したリモート監視

Jvisualvm(またはjconsole)を使用して、リモートで実行中のJava(スプリングブート)アプリケーションを監視したいと思います。ローカルで実行すると、jvisualvmとjconsoleの両方で管理対象Beanを見ることができます。リモートで実行すると、接続できません。いくつかの異なるJavaプロセスで試してみました(例:spring xd)。 SOとGoogleで回答を探しても助けにはなりませんでした。

これらは(リモートホスト上の)私のJava_OPTSです:

$ echo $Java_OPTS
-Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.port=9010 -Dcom.Sun.management.jmxremote.local.only=false -Dcom.Sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.59.99

次に、次のようにプログラムを開始します(これは、Spring XD向けですが、他のJavaプログラムでも同じ問題が発生します)。

$ bin/xd/xd-singlenode

サーバープロセスはオプションを選択しているようです:

$ ps -ef | grep single
vagrant  22938 19917 99 06:38 pts/2    00:00:03 /usr/lib/jvm/Java-8- Oracle/jre/bin/Java -Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.port=9010 -Dcom.Sun.management.jmxremote.local.only=false -Dcom.Sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.59.99 -Dspring.application.name=admin -Dlogging.config=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config///xd-singlenode-logger.properties -Dxd.home=/home/vagrant/spring-xd-1.1.0.RELEASE/xd -Dspring.config.location=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config// -Dxd.config.home=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config// -Dspring.config.name=servers,application -Dxd.module.config.location=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config//modules/ -Dxd.module.config.name=modules -classpath (...)

リモートホスト(ubuntu linux vm)のJavaバージョンは次のとおりです。

$ Java -version
Java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

ローカルマシン(Mac OS)のJavaバージョンはわずかに異なります。

$ Java -version    
Java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

Jvisualvmでは、次のようにリモート接続を追加します(SSL接続ありとなしの両方で試しました):

enter image description here

これはjvisualvmが私に与えるエラーメッセージです:

Error Message given by jvisualvm

リモートプロセスの実行中に、コマンドtelnet 192.168.59.99:9010を使用してローカルホストからリモートホストに接続できます。これはファイアウォールの問題ではないようです。

どんな助けも大歓迎です。

17
user152468

次のJVMオプションを使用してください。

-Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.port=9010 -Dcom.Sun.management.jmxremote.authenticate=false -Dcom.Sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.59.99

Jconsoleでは、次を使用して接続します。

service:jmx:rmi:///jndi/rmi://192.168.59.99:9010/jmxrmi
26
Arnab Biswas