文章

连接服务器上的jmx

在有公网ip的服务器上,部署一个Java服务,开启jmx端口,但是却不能通过公网ip访问。为什么呢?

  1. 方法一:java.rmi.server.hostname
  2. 方法二:修改hostname为外网ip

方法一:java.rmi.server.hostname

查到的第一种解决方式:使用java.rmi.server.hostname参数手动绑定到外网ip:

  • https://docs.oracle.com/javase/8/docs/technotes/guides/rmi/javarmiproperties.html
  • https://stackoverflow.com/a/11988590/7676237
  • https://stackoverflow.com/a/39345042/7676237

即:

1
-Djava.rmi.server.hostname=<external ip>

方法二:修改hostname为外网ip

远程访问,就是得设定hostname:

  • https://segmentfault.com/a/1190000016636787
  • https://www.mscharhag.com/java/java-rmi-things-to-remember

一整篇都在讨论这个问题,我猜是

  • https://stackoverflow.com/questions/834581/remote-jmx-connection/11654322

按照这个人说的把hostname改成ip而非loop ip后,无需再指定java.rmi.server.hostname参数也能远程访问jmx:

  • https://stackoverflow.com/a/27245447/7676237

修改hostname为ip:

1
sudo hostname <external ip>

所以猜想:其实jmx默认是绑定到hostname上的。所以要么让hostname是外网可用的ip,要么让jmx不绑定到默认的hostname上,使用参数手动指定一个。

本文由作者按照 CC BY 4.0 进行授权