web-dev-qa-db-ja.com

JMX URLの説明

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

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

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

ありがとう

66
priyank

この質問に対して以前に作成した回答を再利用します。 Java6のjconsoleを介してTomcatのMBeanServerに接続できません

完全ではありませんが、役立つ場合があります。

RMIレジストリポートで 'TARGET MACHINE'で実行されているJMXサーバー(別名 'JMXエージェント'エイリアス '接続するJVM')があり、 '- JMX RMIサーバーポート at 'JMX RMIサーバーポート'。

注意:

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

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

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

これは厄介に見えます。切り分けましょう。

このURIはRFC2609「Service Location Protocol URL」です(まあ、実際にはURIですよね?)

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

  • service-定数
  • jmx:rmi-サービスタイプ構成:抽象タイプjmxおよびRLスキームrmi
  • 残り-sap(サービスアクセスプロトコル仕様)

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

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

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

RL partは次のように分解されます。

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

これは、SLPのlatter部分によって指定されたRMIレジストリに連絡する必要があるため、ややカートの前です。最初にURL。

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

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
96
David Tonhofer

説明する:

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

お役に立てれば。

5
Prolancer

javax.management.remote.rmi による

このURLはこのように組み立てられます

service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
4
stacker