JMXURLを説明する


80

JMXサービスのURLを理解しようとしています。

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi

誰かが私がこれを理解するのを手伝ってくれるなら、それは素晴らしいことです。

ありがとう


回答:


106

この質問に対して以前に書いた回答を再利用します:Java6のjconsole経由でTomcatのMBeanServerに接続できません

完全ではありませんが、役立つ可能性があります。

JMXサーバー(エイリアス「JMXエージェント」エイリアス「接続するJVM」)が「TARGETMACHINE」で実行されており、RMIレジストリポートが「RMIREGISTRYPORT」にあり、JMXRMIサーバーポートが「JMXRMI 」にあるとします。サーバポート'。

注意:

  1. RMIレジストリはどこ見つけるためにJMXクライアントに指示JMX RMIサーバのポートを、情報はキーの下で取得できますjmxrmi
  2. RMIレジストリポートそれはJVMの起動時に、システムのプロパティで設定されているとして一般的に知られています。
  3. JMX RMIサーバポートは、一般的ではない(他の予防措置が取られていない場合)、JVMはランダムでそれを選択するとしても知られています。

次のURIは、接続の成功につながります(テスト済み)

service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

これは厄介に見えます。バラバラにしましょう。

このURIはRFC2609「サービスロケーションプロトコルURL」です(まあ、それは本当にURIですよね?)

それはで構成されています:

  • service -定数
  • jmx:rmi-抽象型URLスキームで構成されるサービス型 jmx rmi
  • 残り-樹液(サービスアクセスプロトコル仕様)

樹液は次のように分解されます。

  • //<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT> -ipsite
  • /jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi -URL部分

十分な情報に基づいたJMXクライアントが「ipsite」に接続して、JMX-over-RMI交換を実行します。しかし、そのポートを知らないJMXクライアントはどうでしょうか。忍耐...

URL部分は次のように分解されます。

  • /jndi/ -これは、JMXクライアントに次の場所でルックアップ情報を取得できることを伝えているようです
  • rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi -はい、ルックアップキーの下のRMIレジストリでJMXRMIサーバーに関する情報を取得します jmxrmi

最初にSLPURLの後半部分で指定されたRMIレジストリに接続する必要があるため、これはややカートビフォアホースです。

頭をかいた後、直感的に、試してみましょう:

service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

はい、うまくいきます!JMX RMIサーバーポートは、レジストリから適切に取得されます。考え直してみると、ターゲットマシンもレジストリから取得する必要があります。

service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

さらに良いことに、それも機能します!

参照:

  1. http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
  2. http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
  3. http://mx4j.sourceforge.net/docs/ch03s04.html
  4. http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
  5. http://www.rfc-editor.org/rfc/rfc2609.txt

7

説明する:

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
  1. service:jmx:rmi://192.168.30.10:1234-IPアドレス192.168.30.10のマシンにJMXエージェントがあることを示します。JMXエージェントは(TCP)ポート1234を使用して、RMIを介してJMXサービスを提供します(基本的にはRMIサーバーとして機能します)。
  2. /jndi/rmi://192.168.30.10:2344/jmxrmi -RMIを介してJMXエージェントと対話するためのRMIスタブは、IPアドレス192.168.30.10のマシンで実行され、(TCP)ポート2344を使用しているRMIレジストリにあると言います。RMIスタブを取得するには、次のことを行う必要があります。 「jmxrmi」バインディングを検索します。

以前の回答は、URLの2番目の部分がJMXRMIサーバーのサーバーポートを取得することであることを示唆しています。それは正しくありません。JMX RMIサーバーポートは(TCP)1234であり、URLの一部です。RMIレジストリから取得するのは、RMIをjavax.management.remote.rmi.RMIServerImpl_Stub介してJMXエージェント(MBeanサーバー)と通信するために使用できるRMIスタブ()です。

お役に立てれば。


@ david-tonhoferの回答が正しくないとおっしゃっていますが、最初のIP:ポートペア(192.168.30.10:1234この例では)のないURLがどのように機能するか説明していただけますか?つまり、で始まるURLですservice:jmx:rmi:///jndi/rmi:。これが一般的に非常に混乱する理由の一部は、JVMの起動時にjmxポートを指定すると、RMIがどこにも参照されないためです-Dcom.sun.management.jmxremote.port=2344。(私の経験では、jmxremoteポートは「
JMXRMI

JMXエージェントが使用するIPとポートを指定する方法はいくつかあります。特定のIPとアドレスに固定したい場合は、を使用できますservice:jmx:rmi://192.168.30.10:1234。または、com.sun.management.—プロパティを使用することもできます。service:jmx:rmi:///…JavaにIPとポートを(ランダムにまたはシステムプロパティに基づいて)選択させるなどのURLを使用します。などのURLを使用して、service:jmx:rmi://0.0.0.0:1234すべてのインターフェイスでポート1234をバインドします。等々。お役に立てれば。
プロランサー2018

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.