web-dev-qa-db-ja.com

JMXにリモート接続できませんか?

何らかの奇妙な理由で、VisualVMまたはjconsoleを使用してJMXに接続できません。

監視するVMの開始に使用されるパラメーター:

-Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.authenticate=false -Dcom.Sun.management.jmxremote.ssl=false -Dcom.Sun.management.jmxremote.port=1100

私はチェックし、ローカルおよびリモートの両方からこのポートにtelnetで接続できます。

それでも、かなりの時間を費やした後、VisualVMまたはjconsoleは接続に失敗します。

REMOTE MACHINE with JMX (debian)
Java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

MY WORKSTATION (OS X)
Java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

何が問題ですか?

49
sorin

-Djava.rmi.server.hostname = Host ipを追加します。私も同じ問題に直面しました、そして、これはトリックをしました。

この-Djava.rmi.server.hostname = Host ipを追加すると、RMIサービスは127.0.0.1ではなくホストIPを使用するようになります。

80
Sujith

これらは私のために働いたステップです(サーバー側のファイアウォールの後ろのDebianは私のローカルMacからVPN経由で到達されました):

  1. サーバーのパブリックIPを確認してください

    ifconfig

  2. JVMパラメーターを使用します。

    -Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.port = [jmx port] -Dcom.Sun.management.jmxremote.local.only = false -Dcom.Sun.management.jmxremote.authenticate = false- Dcom.Sun.management.jmxremote.ssl = false -Djava.rmi.server.hostname = [ステップ1のサーバーIP]

  3. アプリケーションを実行する

  4. 実行中のプロセスIDを見つけるJavaプロセス

  5. JMX/RMIが使用するすべてのポートを確認します

    netstat -lp | grep [手順4のPID]

  6. ファイアウォールで手順5のすべてのポートを開きます

出来上がり。

27
Mariusz

指定したポート(1100)をリッスンすることに加えて、JMXサーバーはランダムに選択された(一時的な)ポートもリッスンします。チェック、例lsof -i|grep Java linux/osxを使用している場合、Javaプロセスがリッスンするポートであり、ファイアウォールが一時ポートに対しても開かれていることを確認します。

9
johlo

「追加」が永遠に表示され、接続できないように見えるという問題が発生しました。 jvisualvmプロキシ設定([ツール]-> [オプション]-> [ネットワーク])を変更することで問題を解決しました。オプションをプロキシなしに変更すると、接続できました。私のjvmは次のオプションで開始されました:

-Dcom.Sun.management.jmxremote 
-Dcom.Sun.management.jmxremote.port=2222 
-Dcom.Sun.management.jmxremote.authenticate=false 
-Dcom.Sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=<external_IP_of_server> 

次に、jmx接続を追加するときに、「external_IP_of_server:2222」を指定しました

8
ksep

ポートフォワーディングを使用すると、同様の問題が発生しました。 Tomcatがlocalhost:9000でJMXインタラクションをリッスンしているリモートマシンがあります。

私のローカルマシンから、私はポートフォワーディングをするのに慣れています:

ssh -L 9001:localhost:9000 Tomcat.example.com

(したがって、リモートポート9000はローカルマシンのポート9001に転送されます)。

その後、VisualVMを使用してlocalhost:9001に接続しようとしたときに、接続が拒否されました。 JMXでは、両側のポート番号が同一である必要があります。

だから私のソリューションはポート番号9000と9000を使用していました:

    ssh -L 9000:localhost:9000 Tomcat.example.com

これで、ローカルマシンのVisualVMがlocalhost:9000を介してリモートマシンのTomcatに正常に接続します。

同じポートでリッスンする他のサービス(開発マシンのTomcat?)がないことを確認してください。

パラメータを正しく設定する もご覧ください。

7
Abdull

問題が見つかりました。rmiサービスは「127.0.0.1」のホストIPで実行されていました。リモートでjvmに接続するには、外部IPをホスト名にバインドする必要がありました。 UNIXシステムでこれを行うには、コマンドhostnameを使用してホスト名の名前を取得します。次に、ホスト名に割り当てられたIPを確認します。これを使用するには、ping $(hostname)を使用して、システムがhosnameのIPをpingしていることがわかります。ホストIPがデフォルトの「127.0.0.1」で、変更したい場合は、ファイル/ etc/hostsをスーパーユーザーとして編集するだけです。 rmiサービスを再起動した後、リモートマシンからアクセスできます。

2
Reza Ameri

jarファイルを実行する場合(-jarオプションを使用)、-jarオプションの前に他のすべてのオプションを指定する必要があります。

1
Hett

私は入社したばかりなので、ヘットの答えに賛成することはできませんが、試行錯誤の次の週から私の命を救いました!

これは、動作するDockerfileの例です。

FROM store/Oracle/serverjre:8 

RUN mkdir -p /opt/app

ENV APP_PATH /opt/app

WORKDIR $APP_PATH   

COPY . $APP_PATH

CMD ["Java", \
     "-Dcom.Sun.management.jmxremote", \
     "-Dcom.Sun.management.jmxremote.port=9010", \
     "-Dcom.Sun.management.jmxremote.rmi.port=9010", \
     "-Dcom.Sun.management.jmxremote.authenticate=false", \
     "-Dcom.Sun.management.jmxremote.ssl=false", \
     "-Djava.rmi.server.hostname=12.345.67.89", \
     "-jar", \
     "app-service-0.0.1-SNAPSHOT.jar"]

EXPOSE 9010
1
Angie Tawfik

上記の答えに対する私の2セント。

ほとんどの回答では、ホスト名のみが言及されており、ポートは言及されていません。ポートを指定していない場合、サーバーは動的にRMIポートを割り当てます。両方のサーバーが同じサブネットにあるか、ファイアウォールの問題がない場合、問題はありません。懸念がある場合は、フリーズするJVMパラメーターを追加できます。

-Dcom.Sun.management.jmxremote.rmi.port

例:

<option name="-Dcom.Sun.management.jmxremote.rmi.port" value="11001"/>

RMIとJMXの両方のポートが同じであることを確認してください。詳細については、 ここをクリック

0
vardhan

マシンの例に間違ったIPがない場合は、/ etc/hostsを見てください:127.0.0.1 localhost 127.0.0.2 your_machine 185.12.58.2 your_machine(マシンに適したIP)

JMXはIP 127.0.0.2を取得し、もう一方を忘れます

0
Dominique MITRE