如何找到默认的JMX端口号?
我正在远程Windows XP上的Java 6 VM上运行Java应用程序,我可以在其上运行jvisualvm.exe以自动连接到正在运行的应用程序。
现在我需要从本地计算机连接该应用程序,但我不知道远程计算机的JMX端口号。在哪里可以找到它?或者,我必须使用一些 VM 参数重新启动该应用程序以指定端口号?
在阅读了如何在服务器中找到JMX端口的问题后,我在远程计算机上执行了命令
netstat -apn
但一无所获。
我正在远程Windows XP上的Java 6 VM上运行Java应用程序,我可以在其上运行jvisualvm.exe以自动连接到正在运行的应用程序。
现在我需要从本地计算机连接该应用程序,但我不知道远程计算机的JMX端口号。在哪里可以找到它?或者,我必须使用一些 VM 参数重新启动该应用程序以指定端口号?
在阅读了如何在服务器中找到JMX端口的问题后,我在远程计算机上执行了命令
netstat -apn
但一无所获。
现在我需要从本地计算机连接该应用程序,但我不知道远程计算机的JMX端口号。在哪里可以找到它?或者,我必须使用一些 VM 参数重新启动该应用程序以指定端口号?
默认情况下,JMX 不会在端口上发布,除非您指定此页面中的参数:如何激活 JMX...
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost
注意:您需要注意上述某些设置的安全后果。
此外,如果您正在运行,您应该能够访问这些系统属性中的任何一个,以查看它们是否已设置:
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));
}
}
根据服务器的连接方式,您可能还必须指定以下参数。作为初始 JMX 连接的一部分,jconsole 最多连接到 RMI 端口,以确定 JMX 服务器在哪个端口上运行。最初启动启用了 JMX 的应用程序时,它会查看自己的主机名,以确定在该初始 RMI 事务中要返回的地址。如果您的主机名不在中,或者它被设置为不正确的接口地址,那么您可以使用以下内容覆盖它:/etc/hosts
-Djava.rmi.server.hostname=<IP address>
顺便说一句,我的 SimpleJMX 软件包允许您定义 JMX 服务器和 RMI 端口,或者将它们都设置为同一端口。上面定义的端口实际上是 RMI 端口。这告诉客户机 JMX 服务器在哪个端口上运行。com.sun.management.jmxremote.port