25

Web アプリケーションをリモート レジン サーバーにデプロイしており、JMX がオンになっています。

リモートサーバーにtelnetで接続できます

franz@see:/tmp$ telnet <remote-ip> 5555
Trying <remote-ip>...
Connected to <remote-ip>.
Escape character is '^]'.
��sr5javax.management.remote.message.HandshakeBeginMessage�,���6profilestLjava/lang/String;Lversionq~xppt1.0^]

telnet> q
Connection closed.

しかし、JConsole を使用して接続できません

$JAVA_HOME/bin/java -cp $JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:pm-common/lib/jmxremote_optional-1_0_1_3.jar sun.tools.jconsole.JConsole service:jmx:jmxmp://<remote-ip>:5555

次の Java バージョンでこれを試しましたが、両方のインスタンスで「接続に失敗しました」と表示されます。

## where JAVA_HOME=/opt/java/64/jdk1.5.0_22
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)

## where JAVA_HOME=/opt/java/64/jdk1.6.0_17
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)

これをデバッグする方法について何か考えがありますか (つまり、何が間違っているかを調べます)?

4

8 に答える 8

40

次のJavaプロパティを設定してアプリケーションを実行していることを確認してください

-Dcom.sun.management.jmxremote.port=9005
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

今すぐ接続してみてください。これをデバッグしたい場合は、次のコマンドで jconsole を実行できます。

jconsole -J-Djava.util.logging.config.file=path_to_logging.properties_for_jconsole

以下は logging.properties ファイルの内容です

Logging.properties

handlers = java.util.logging.ConsoleHandler


.level = INFO

java.util.logging.ConsoleHandler.level = FINEST

java.util.logging.ConsoleHandler.formatter = \

java.util.logging.SimpleFormatter

// Use FINER or FINEST for javax.management.remote.level - FINEST is

// very verbose...

javax.management.level = FINEST

javax.management.remote.level = FINER

別のウィンドウを実行jconsoleすると、ログが表示されます。

于 2011-09-16T12:33:49.303 に答える
25

実行するjconsole -debugと、失敗に関する詳細な診断情報が得られます。Daniel Fuchs のブログ エントリ「JConsole での接続の問題のトラブルシューティング」を参照 してください。

私はこれを行い、ターゲットプロセスが別の(64ビット)jvmで開始された32ビットjconsoleを使用していたことを示したので、明らかにこれは許可されておらず、失敗していました。

于 2012-01-10T22:48:42.273 に答える
9

これでようやくうまくいきました:この追加オプションを与える: -Djava.rmi.server.hostname=<ip addres where jvm is running

したがって、リモート マシンから jconsole を開くために使用されるすべての vm 引数は、リモート マシン上の jvm で開始する必要があります。

 -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<ip address>

全体のプロセスは ここにリストされています

于 2014-08-28T08:22:58.733 に答える
3

cygwin を介して Java プロセスを開始すると、同じ問題が発生しました。JConsole が接続できません。win7-cmd を使用して開始すると、すべてが期待どおりに機能します。

于 2011-06-01T11:55:25.210 に答える
1

アプリケーションがJDK 1.6 で実行されている場合は、接続できるはずです。1.6 より前の JDKを使用している場合は、次の JVM 引数を指定して実行します。

-Dcom.sun.management.jmxremote

于 2011-03-28T08:51:03.647 に答える
1

これが役立つかどうかはわかりませんが、ドキュメント化されていない (変更される可能性がある) sun.* クラスを使用してコンソールを起動するのではなく、JDK bin ディレクトリにある jconsole バイナリを使用する必要があるかもしれません。

于 2011-03-28T08:12:32.863 に答える