问题描述
我有一台运行 Apache ActiveMQ 的 RHEL6 服务器,但我找不到禁用对 JMX 的远程访问的方法。 我可以完全禁用 JMX,但这限制了 ActiveMQ 的功能,它使用 JMX 访问代理以获取状态信息,或传达关闭请求(ActiveMQ 回退到 SIGKILL!)。 我想让 ActiveMQ 可以通过 JMX 访问,但只能从本地主机访问。
根据Apache's website,默认情况下应该禁用远程连接,但我可以从其他机器连接到默认的 1099 端口。据我所知,JMX 的设置保留为默认值。
我知道一些类似的问题,但建议的解决方案对我不起作用,特别是:
- 添加
-Dcom.sun.management.jmxremote.host=localhost
和/或-Dcom.sun.management.jmxremote.local.only=true
没有帮助 - 添加
-Djava.rmi.server.hostname=localhost
也无济于事
尽管此 solution 及其一些注释似乎表明我正在运行的 Java 版本 (>8u102) 修复了一些已知问题。
一些解决方案谈到有必要切换到“编码”(例如,this 或 this),但我不清楚这种方法如何与 ActiveMQ 一起使用。
解决方法
在 bin/env(Apache ActiveMQ 构建)中添加:
-Dcom.sun.management.jmxremote.host=127.0.0.1
然后观察JMX端口只绑定到localhost ip
% netstat -na | grep 1099
tcp4 0 0 127.0.0.1.11099 *.* LISTEN