簡體   English   中英

無法遠程連接到 JMX?

[英]Unable to remotely connect to JMX?

由於某些奇怪的原因,我無法使用VisualVMjconsole連接到 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)

問題是什么?

添加-Djava.rmi.server.hostname = host ip 即使我遇到了同樣的問題,這也成功了。

添加此-Djava.rmi.server.hostname = host ip強制 RMI 服務使用主機 ip 而不是 127.0.0.1

這些是對我有用的步驟(服務器端防火牆后面的 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 步中的所有端口

瞧。

除了偵聽您指定的端口 (1100) 之外,JMX 服務器還偵聽隨機選擇的(臨時)端口。 檢查,例如使用lsof -i|grep java如果您在 linux/osx 上,java 進程偵聽哪些端口,並確保您的防火牆也為臨時端口打開。

我遇到了它永遠說“添加”並且似乎無法連接的問題。 我通過更改 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”

使用端口轉發時我遇到了類似的問題。 我有一台帶有 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?)在同一端口上偵聽。

還要看看正確設置參數

由於我剛剛加入,我無法對 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

我對上述答案的兩分錢..

我看到大多數答案只提到了主機名,但沒有提到端口。 如果我們沒有指定端口,那么服務器將動態分配 RMI 端口。 如果兩台服務器在同一子網中或沒有防火牆問題,則不會有任何問題。 如果有任何問題,我們可以添加下面的JVM參數來凍結。

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

前任:

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

確保 RMI 和 JMX 端口應該相同。 更多信息, 請點擊這里

如果您運行jar文件(通過 -jar 選項),則必須在-jar選項之前指定所有其他 jvm 選項!

我發現了問題,我的 rmi 服務在主機 ip 上運行,它是“127.0.0.1”。 要遠程連接到 jvm,我必須將外部 ip 綁定到主機名。 要在 unix 系統中執行此操作,請使用命令hostname來獲取hostname的名稱。 然后檢查分配給主機名的 ip,找出這個使用ping $(hostname)你會看到系統正在 ping ping $(hostname)的 ip。 如果您的主機 IP 是默認的“127.0.0.1”並且您想更改它,只需以超級用戶身份編輯文件 /etc/hosts。 重新啟動 rmi 服務后,您可以從遠程機器訪問它。

如果您的機器沒有錯誤的 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 而忘記另一個

感謝@Arpit Agarwal,以下對我有用。 添加了這個對我有用的附加 jvm 參數。

    -Djava.rmi.server.hostname=192.168.1.16

對我有用的完整列表。

 -Dcom.sun.management.jmxremote 
 -Dcom.sun.management.jmxremote.port=21845
 -Dcom.sun.management.jmxremote.ssl=false 
 -Dcom.sun.management.jmxremote.authenticate=false
 -Dcom.sun.management.jmxremote.local.only=false 
 -Djava.rmi.server.hostname=192.168.1.16
 -Dcom.sun.management.jmxremote.rmi.port=10099 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM