Case

背景

在公司微服务上开启JMX,同时通过ssh反向代理,开本地端口,把本地端口代理到服务器JMX端口(因为服务器无法直接在办公网络访问)。

最终方案

#代理
ssh -fnNT -R 10011:127.0.0.1:10011 [email protected]
#JVM参数
-Djava.rmi.server.hostname=127.0.0.1 \\
 -Dcom.sun.management.jmxremote.port=10011 \\ 
 -Dcom.sun.management.jmxremote.rmi.port=10011 \\
 -Dcom.sun.management.jmxremote.authenticate=false \\ 
 -Dcom.sun.management.jmxremote.ssl=false \\

遇到的问题

One

 -Dcom.sun.management.jmxremote.port=10011 \\ 
 -Dcom.sun.management.jmxremote.authenticate=false \\ 
 -Dcom.sun.management.jmxremote.ssl=false \\

这么配置,本地telnet 10011可以,但是jconsole连不上。查资料,是说还有一个随机数据端口。

尝试再开一个ssh,代理该端口。依然失败。

Two

 -Dcom.sun.management.jmxremote.port=10011 \\ 
 -Dcom.sun.management.jmxremote.rmi.port=10011 \\
 -Dcom.sun.management.jmxremote.authenticate=false \\ 
 -Dcom.sun.management.jmxremote.ssl=false \\

添加该端口,依然失败。

因为服务器有多个网络interface,猜测访问数据端口用的10.*网段的IP。

Three

-Djava.rmi.server.hostname=127.0.0.1 \\
 -Dcom.sun.management.jmxremote.port=10011 \\ 
 -Dcom.sun.management.jmxremote.rmi.port=10011 \\
 -Dcom.sun.management.jmxremote.authenticate=false \\ 
 -Dcom.sun.management.jmxremote.ssl=false \\

成功。说明需要强制指定ip,否则,会使用10网段。

延展