123

過去にこれを機能させたことがないようです。現在、私はそれが機能しないことを知っています。

しかし、Java プロセスを開始します。

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

ポートに telnet で接続でき、「何かが存在する」 (つまり、プロセスを開始しないと何も応答しないが、開始すると応答する) が、JConsole で IP を入力して動作させることができないとポート。

とてもシンプルなはずですが、エラーもノイズも何もありません。うまくいきません。

これに関するホットなヒントを知っている人はいますか?

4

20 に答える 20

65

Java 8以降のバージョンで試しました

このソリューションは、ファイアウォールでもうまく機能します

1. これをリモート ホストの Java 起動スクリプトに追加します。

-Dcom.sun.management.jmxremote.port=1616
-Dcom.sun.management.jmxremote.rmi.port=1616
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

2. これをコンピュータで実行します。

  • Windows ユーザー:

    putty.exe -ssh user@remote-host -L 1616:remote-host:1616

  • Linux および Mac ユーザー:

    ssh user@remote-host -L 1616:remote-host:1616

3.jconsoleパソコンで起動

jconsole localhost:1616

4. 楽しんでください!

PS: ステップ 2 で、ローカル (クライアント) ホストのポート 1616 をリモート側に転送する必要があることを指定しますssh-Lこれは ssh トンネルであり、ファイアウォールやさまざまなネットワークの問題を回避するのに役立ちます。

于 2015-11-24T11:47:16.180 に答える
18

ここ数日間 Google-fu をテストした後、スタック オーバーフローとこのページhttp://help.boomi.com/atomsphere/GUID-F787998C-からの回答をコンパイルした後、ようやくこれを機能させることができました。53C8-4662-AA06-8B1D32F9D55B.html .

Dell Boomi ページからの再投稿:

To Enable Remote JMX on an Atom

If you want to monitor the status of an Atom, you need to turn on Remote JMX (Java Management Extensions) for the Atom.

Use a text editor to open the <atom_installation_directory>\bin\atom.vmoptions file.

Add the following lines to the file:

-Dcom.sun.management.jmxremote.port=5002
-Dcom.sun.management.jmxremote.rmi.port=5002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

私がスタックオーバーフローの回答カバーを見たことがない1行は

-Dcom.sun.management.jmxremote.rmi.port=5002

私の場合、Kafka メトリクスを取得しようとしていたので、-Dcom.sun.management.jmxremote.port値に一致するように上記のオプションを変更しただけです。したがって、いかなる種類の認証も行わない場合、最低限の構成は次のようになります。

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=(jmx remote port)

-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=(jmx remote port)
-Djava.rmi.server.hostname=(CNAME|IP Address)
于 2014-12-16T19:10:07.237 に答える
11

Linux で実行していますか? 管理エージェントが localhost にバインドしている可能性があります。

http://java.sun.com/j2se/1.5.0/docs/guide/management/faq.html#linux1

于 2008-09-30T03:13:08.080 に答える
7

Sushicutta の手順 4 ~ 7 は、次の行を手順 3 に追加することでスキップできます。

-Dcom.sun.management.jmxremote.rmi.port=<same port as jmx-remote-port>

例: 起動パラメータに追加:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

ポート転送の場合、次を使用して接続します。

ssh -L 12345:localhost:12345 <username>@<host>

ホストが飛び石の場合は、上記の後に踏み台で次のコマンドを実行して、ポートを前方にチェーンするだけです。

ssh -L 12345:localhost:12345 <username>@<host2>

jmxremote が rmi 接続にトンネルを使用するように指示していることを確認するには、hostname=localhostが必要であることに注意してください。そうしないと、直接接続しようとしてファイアウォールにヒットする可能性があります。

于 2016-04-08T12:18:04.010 に答える
6

ヒント:

RMI ポートは任意の portnr で開かれます。ファイアウォールがあり、ポート 1024 ~ 65535 を開きたくない (または vpn を使用したくない) 場合は、次の手順を実行する必要があります。

RMI レジストリと JMX/RMI サーバーのポートを (既知の番号を持つように) 修正する必要があります。これを行うには、jar ファイル (エクストラにある catalina-jmx-remote.jar) を lib-dir に配置し、サーバーの下に特別なリスナーを構成します。

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
      rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

(そしてもちろん、JMX をアクティブ化するための通常のフラグ

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname=<HOSTNAME> \

参照: http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.htmlの JMX リモート ライフサイクル リスナー

次に、この恐ろしい URL を使用して接続できます。

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi
于 2013-10-11T09:48:12.753 に答える
5

サーバーがファイアウォールの背後にあるかどうかを確認します。JMX は、起動時に 2 つのポートを開く RMI に基づいています。1 つはレジスタ ポートで、デフォルトは 1099 で、com.sun.management.jmxremote.portオプションで指定できます。もう 1 つはデータ通信用で、ランダムであることが問題の原因です。幸いなことに、JDK6 から、このランダムなポートをcom.sun.management.jmxremote.rmi.portオプションで指定できるようになりました。

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
于 2015-06-04T06:37:08.387 に答える
4

ファイアウォールを通過して JMX を取得するのは非常に困難です。問題は、標準の RMI が 2 番目のランダムに割り当てられたポート (RMI レジストリの横) を使用することです。

機能する 3 つのソリューションがありますが、すべてのケースで異なるソリューションが必要です。

  1. Socks プロキシを使用した SSH トンネルを介した JMX、SSH マジックで標準の RMI を使用 http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

  2. JMX MP (標準 RMI の代替) は、1 つの固定ポートのみを使用しますが、サーバーとクライアントに特別な jar が必要です http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/

  3. JMX サーバー フォーム コードを開始します。標準の RMI を使用し、固定の 2 番目のポートを使用できます: https://issues.apache.org/bugzilla/show_bug.cgi?id=39055

于 2013-06-17T07:34:45.070 に答える
2

ここにはすでにいくつかの優れた回答がありますが、共有する価値があると思われるもう少し単純なアプローチがあります。

sushicutta のアプローチは優れていますが、毎回 RMI ポートを取得する必要があるため、非常に手動です。ありがたいことに、ポート トンネルを明示的に開くのではなく、SOCKS プロキシを使用することで回避できます。このアプローチの欠点は、マシンで実行する JMX アプリがプロキシを使用するように構成できる必要があることです。ほとんどのプロセスでは、Java プロパティを追加することでこれを実行できますが、一部のアプリはこれをサポートしていません。

手順:

  1. リモート Java サービスの起動スクリプトに JMX オプションを追加します。

    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=8090
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    
  2. リモート マシンへの SOCKS プロキシ接続をセットアップします。

    ssh -D 9696 user@remotemachine.com
    
  3. SOCKS プロキシ (localhost:9696) を使用するようにローカル Java 監視アプリを構成します。注:コマンド ラインからこれを実行できる場合もあります。

    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9696
    
于 2015-01-27T09:31:36.807 に答える
2

リモートJMX の問題をテスト/デバッグ/診断するときは、ネットワークやその他の非 JMX 固有の問題を除外するために、最初に必ず MBeanServer を含む同じホスト (つまり、localhost) に接続してみてください。

于 2008-12-12T14:17:21.570 に答える
1

Linux Redhat ES3 を実行している tomcat にフックする Windows で JConsole/JVisualVm を実行しています。

次のコマンドを使用してパケットフィルタリングを無効にすると、うまくいきました。

/usr/sbin/iptables -I INPUT -s jconsole-host -p tcp --destination-port jmxremote-port -j ACCEPT

ここで、jconsole-host は、JConsole が実行されるホスト名またはホスト アドレスであり、jmxremote-port は、リモート管理用の com.sun.management.jmxremote.port に設定されたポート番号です。

于 2010-07-15T13:57:17.093 に答える
0

JMC で Flight Recorder (JFR) を実行して、JMC を実行するためのグラフィカル環境を提供しないリモート サーバーで NiFi をプロファイリングしようとしています。

ここで与えられた他の回答に基づいて、多くの試行錯誤の結果、NiFi を起動するときにJVM ( conf/bootstrap.conf ) に提供するものは次のとおりです。

java.arg.90=-Dcom.sun.management.jmxremote=true
java.arg.91=-Dcom.sun.management.jmxremote.port=9098
java.arg.92=-Dcom.sun.management.jmxremote.rmi.port=9098
java.arg.93=-Dcom.sun.management.jmxremote.authenticate=false
java.arg.94=-Dcom.sun.management.jmxremote.ssl=false
java.arg.95=-Dcom.sun.management.jmxremote.local.only=false
java.arg.96=-Djava.rmi.server.hostname=10.10.10.92  (the IP address of my server running NiFi)

これを/etc/hostsに入れましたが、必要かどうかは疑問です。

10.10.10.92   localhost

次に、JMC の起動時に、次のプロパティを使用してリモート接続を作成します。

Host: 10.10.10.92
Port: 9098
User: (nothing)
Password: (ibid)

ちなみに、カスタム JMX サービスの URL をクリックすると、次のように表示されます。

service:jmx:rmi:///jndi/rmi://10.10.10.92:9098/jmxrmi

これは最終的に私のためにそれをしました。

于 2016-12-22T00:21:46.167 に答える
0

また、マシン名が JMX のバインド先の IP に解決されることも確認する必要があります。localhost や 127.0.0.1 ではありません。私にとっては、これを明示的に定義するエントリをホストに入れることが役に立ちました。

于 2013-03-28T15:46:59.913 に答える
0

ファイアウォールを介して JMX を取得することは、それほど難しくありません。1 つの小さなキャッチがあります。JMX構成ポートの両方を転送する必要があります。9010 と、私のマシンでリッスンする動的ポートの 1 つは > 30000 でした

于 2013-08-26T23:44:58.683 に答える