我有一个解决方案:
另见:https ://stackoverflow.com/a/17457394/1531271
如果您的Java 进程在防火墙后面的 Linux 上运行,并且您想在本地计算机上的 Windows 上启动 Jconsole。
注意:如果您没有 putty.exe(如果您是 linux oder mac os 用户),您也可以使用 ssh 命令添加隧道
1. 您需要从这里为您的 Windows 机器安装 putty-suite:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
至少putty.exe
2.首先在linux机器上查看ip地址
hostname -i
result ---> <your-linux-ip-adress>
例子:
your-linux-ip-adress = 10.20.30.40
3.在你的linux机器上定义两个空闲端口:
<jmx-remote-port>
<jndi-remote-port>
例子:
jmx-remote-port = 15666
jndi-remote-port = 15667
4.给linux机器上的java进程添加参数
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=<your-linux-ip-adress>
-Djava.rmi.activation.port=<jndi-remote-port>
例子:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=10.20.30.40 -Djava.rmi.activation.port=15667 ch.sushicutta.jmxremote.Main
5. 在你的 Windows 机器上使用 putty 启用两个 SSH 隧道
Source port: <jmx-remote-port>
Destination: <your-linux-ip-adress>:<jmx-remote-port>
[x] Local
[x] Auto
Source port: <jndi-remote-port>
Destination: <your-linux-ip-adress>:<jndi-remote-port>
[x] Local
[x] Auto
例子:
Source port: 15666
Destination: 10.20.30.40:15666
[x] Local
[x] Auto
Source port: 15667
Destination: 10.20.30.40:15667
[x] Local
[x] Auto
6. 登录到您的 Linux 机器并启用此 SSH 隧道。
当您登录时,Putty 会将所有 TCP 连接隧道连接到
localhost:15666 and localhost:15667
至
10.20.30.40:15666 and 10.20.30.40:15667
7. 启动 JConsole 并使用以下 URL 连接到您的 Java 进程
[x] Remote Process:
service:jmx:rmi://localhost:**<jndi-remote-port>**/jndi/rmi://localhost:<jmx-remote-port>/jmxrmi
例子:
[x] Remote Process:
service:jmx:rmi://localhost:15667/jndi/rmi://localhost:15666/jmxrmi
8.享受:)