62

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

監視対象の 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)

何が問題ですか?

4

11 に答える 11

100

を追加し-Djava.rmi.server.hostname = host ipます。私も同じ問題に直面しましたが、これでうまくいきました。

これを追加すると、-Djava.rmi.server.hostname = host ipRMI サービスは 127.0.0.1 の代わりにホスト IP を使用するようになります。

于 2012-08-16T13:46:33.357 に答える
38

これらは私にとってうまくいった手順です(サーバー側のファイアウォールの背後にある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=[server ip from step 1]
  1. アプリケーションを実行

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

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

    netstat -lp | grep [pid from step 4]

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

出来上がり。

于 2015-02-10T20:20:26.980 に答える
10

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

于 2012-07-24T10:20:46.380 に答える
6

私は参加したばかりなので、ヘットの答えに賛成することはできませんが、試行錯誤の別の週から私の命を救ってくれました!

これは、動作する 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
于 2019-02-25T20:57:25.760 に答える
4

file を (-jar オプションを介して)実行する場合はjar、オプションの前に他のすべての jvm オプションを指定する必要があり-jarます。

于 2018-09-20T07:46:35.617 に答える
2

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

于 2014-04-28T10:29:07.103 に答える
0

マシンの 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 を取得し、他の IP は無視します

于 2019-02-27T16:12:08.117 に答える