有没有办法让jconsole只通过9999连接或使用代理?
这篇文章仍然是最好的解决方案吗?还是我漏掉了什么?
是的,那篇文章大致正确。
当您在服务器上指定JMX端口(
-Dcom.sun.management.jmxremote.port=####
)时,您实际上只指定了应用程序的注册表端口。当您连接后,它提供了一个额外的服务器端口,jconsole实际上使用该端口进行所有工作。要使转发起作用,您需要知道注册表和服务器端口。
以下类似的内容应该可以将您的应用程序运行时的注册表和服务器端口都设置为8000。请参见
此处以获取更多详细信息。
-Dcom.sun.management.jmxremote.port=8000
-Dcom.sun.management.jmxremote.rmi.port=8000
-Djava.rmi.server.hostname=127.0.0.1
作为旁注,我的
SimpleJMX库允许您轻松设置两个端口,并且您可以将它们都设置为相同的端口。
因此,一旦您知道需要转发的两个端口,就可以设置您的
ssh
命令。例如,如果您将注册表和服务器端口配置为8000,则应执行以下操作:
ssh -L 8000:localhost:8000 remote-host
这将创建一个本地端口8000,它将转发到远程主机上的localhost:8000。如果您需要转发多个端口,则可以指定多个-L参数。然后,您可以将jconsole连接到localhost:8000,它将适当地连接到远程主机。
另外,如果您的服务器有多个接口,您可能需要设置java.rmi.server.hostname变量以绑定到正确的接口。
-Djava.rmi.server.hostname=10.1.2.3