2012-04-26 55 views
33

我在遠程Windows XP上運行Java 6 VM上的Java應用程序,在該應用程序上可以運行jvisualvm.exe以自動連接到正在運行的應用程序。如何找到默認的JMX端口號?

現在我需要從本地計算機連接該應用程序,但我不知道遠程計算機的JMX端口號。我在哪裏可以找到它?或者,我是否必須使用一些VM參數重新啓動該應用程序以指定端口號?

閱讀問題How to find the JMX port in a server後,我執行命令的遠程計算機

netstat -apn 

上,但一無所獲。

+0

[如何激活我的JVM上的JMX以訪問jconsole?](http://stackoverflow.com/questions/856881/how-to-activate-jmx-on-my-jvm-for-access -with-jconsole) – artbristol 2012-04-26 11:05:05

回答

44

默認情況下,除非你從這個頁面指定參數JMX沒有一個端口上發佈:How to activate JMX...

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9010 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.authenticate=false 

如果您正在運行,你應該能夠訪問任何的系統屬性,看看他們是否有設置:

if (System.getProperty("com.sun.management.jmxremote") == null) { 
    System.out.println("JMX remote is disabled"); 
} else [ 
    String portString = System.getProperty("com.sun.management.jmxremote.port"); 
    if (portString != null) { 
     System.out.println("JMX running on port " 
      + Integer.parseInt(portString)); 
    } 
} 

順便說一句,我的SimpleJMX package允許您定義兩個JMX serverRMI port或將它們都設置爲相同的端口。用com.sun.management.jmxremote.port定義的上述端口實際上是RMI端口。這告訴客戶端運行JMX服務器的端口。

+4

您錯過了'-Dcom.sun.management.jmxremote.ssl = false'和'-Djava.rmi.server.hostname = ' – Claudio 2016-08-02 07:08:50

+0

這些都不是必需的@Claudio至少需要Java 7。 – Gray 2016-08-02 15:12:54

+2

不是以我的經驗。我在Linux CentOS 6上運行Java 7。我找到了你的答案,並沒有奏效。幸運的是,您還提供了原始答案的鏈接並添加了它開始工作的標誌。不知道實際需要哪個標誌以及爲什麼。 – Claudio 2016-08-02 15:59:44