1. ホーム

[解決済み] jconsoleでアクセスするために、私のJVM上でJMXを有効にする方法は?

2022-04-01 22:15:13

質問

jconsoleでアクセスするために、JVM上でJMXを有効にする方法は?

どのように解決するのですか?

関連ドキュメントはこちらでご覧いただけます。

http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

以下のパラメータを指定して、プログラムを開始します。

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.rmi.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

例えばこんな感じ。

java -Dcom.sun.management.jmxremote \
  -Dcom.sun.management.jmxremote.port=9010 \
  -Dcom.sun.management.jmxremote.local.only=false \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Dcom.sun.management.jmxremote.ssl=false \
  -jar Notepad.jar

-Dcom.sun.management.jmxremote.local.only=false は必ずしも必要ではありません。 が、これがないとUbuntuでは動きません。エラーは次のようなものです。 これを

01 Oct 2008 2:16:22 PM sun.rmi.transport. customer .TCPTransport$AcceptLoop executeAcceptLoop
WARNING: RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=37278] throws
java.io.IOException: The server sockets created using the LocalRMIServerSocketFactory only accept connections from clients running on the host where the RMI remote objects have been exported.
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:89)
    at sun.rmi.transport. customer .TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387)
    at sun.rmi.transport. customer .TCPTransport$AcceptLoop.run(TCPTransport.java:359)
    at java.lang.Thread.run(Thread.java:636)

見る http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6754672

にも注意が必要です。 -Dcom.sun.management.jmxremote.authenticate=false これは は誰でもアクセスできるようになりますが、JVMを追跡するためだけに使用するのであれば ローカルマシンには関係ありません。

更新情報 :

サーバーに到達できないケースがありました。その場合は、このパラメータも設定すると直りました。 -Djava.rmi.server.hostname=127.0.0.1