能否让所有JMX端口仅绑定到回环接口?(基于Oracle Java SE 1.8.0_121)
解决Oracle Java SE 1.8.0_121的JMX端口绑定问题
我之前在使用Oracle Java SE 1.8.0_121配置JMX监控时,也碰到过和你一样的端口困惑,先分享下已经验证有效的配置,再聊聊那个顽固的动态端口问题:
已确认有效的端口优化配置
- 可以将
jmxremote.port与jmxremote.rmi.port设置为同一数值,这样能减少端口占用,不用维护两个独立的监听端口 - 通过添加
jmxremote.host=127.0.0.1参数,可让指定的JMX端口仅绑定回环接口,避免不必要的公网暴露
未解决的动态端口问题
即便做了上述配置,还是会有一个动态分配的端口绑定到0.0.0.0,我尝试过用-XX:+DisableAttachMechanism参数来阻止,但这个方法在1.8.0_121版本里并没有生效。目前我还在排查这个端口的来源,暂时能给出的排查方向有:
- 用
netstat -ano(Windows)或ss -tulpn(Linux)工具定位这个动态端口对应的进程和关联服务,确认是否和JMX的RMI自动发现机制有关 - 尝试添加
com.sun.management.jmxremote.autodiscovery=false参数,禁用JMX的自动发现功能,看看是否能阻止动态端口的生成 - 检查JVM启动参数是否被其他配置文件或启动脚本覆盖,确保
-XX:+DisableAttachMechanism确实被正确传递给了JVM
内容的提问来源于stack exchange,提问作者user2679436




