我需要使用 JMX 监控我的 VCenter Server 应用程序(它是一个 Java 应用程序)。
我已经看到很多关于此的帖子并关注了,但我仍然无法让它工作。
VCenter 在我们内部网络的虚拟机上运行。
在 wrapper.conf 文件中进行了这些更改
wrapper.java.additional.22="-Dcom.sun.management.jmxremote"
wrapper.java.additional.23="-Dcom.sun.management.jmxremote.port=1100"
wrapper.java.additional.24="-Dcom.sun.management.jmxremote.ssl=false"
wrapper.java.additional.25="-Dcom.sun.management.jmxremote.authenticate=false"
wrapper.java.additional.26="-Djava.rmi.server.hostname=hostname where vcenter runs"
#wrapper.java.additional.27="-Dcom.sun.management.jmxremote.rmi.port=1100"
我可以在本地将 Jconsole 连接到 1100 端口。我一启动服务,就看到端口正常监听
PS U:\> netstat -an | findstr 1100
TCP 0.0.0.0:1100 0.0.0.0:0 LISTENING
TCP [::]:1100 [::]:0 LISTENING
一旦我尝试从我的笔记本电脑连接它,它就会显示这个
PS U:\> netstat -an | findstr 1100
TCP 0.0.0.0:1100 0.0.0.0:0 LISTENING
TCP "ipofvcenterserver":1100 11.248.18.xx:51988 ESTABLISHED
TCP [::]:1100 [::]:0 LISTENING
[更新] 我注意到如果我添加 Dcom.sun.management.jmxremote.rmi.port=1100 并使用 jconsole 进行连接,则已建立的连接如下所示。但是11.248.18.xxx不是远程客户端(我的笔记本电脑)的IP地址
PS U:\> netstat -an | Findstr 1100
TCP 0.0.0.0:1100 0.0.0.0:0 LISTENING
TCP ipofrmiserver:1100 11.248.18.xxx:56728 ESTABLISHED
TCP ipofrmiserver:1100 11.248.18.xxx:56729 ESTABLISHED
TCP [::]:1100 [::]:0 LISTENING
我看到已经建立了一些连接,但 jconsole 仍然提示它无法连接
故障排除步骤已完成:
1) 关闭 vcenter 服务器机器上的防火墙以保持简单 2) 从我的笔记本电脑远程登录到 1100 3) 根据这篇文章https://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/,尝试将 jmxremote_optional.jar 复制到 VMWARE_JAVA_HOME\lib,即 C:\Program Files\VMware\vCenter Server\jre\lib 4)能够ping通Vcenter运行所在服务器的主机名 5) 没有这个 wrapper.java.additional.27="-Dcom.sun.management.jmxremote.rmi.port=1100" 6) 尝试过 tcpdump,但没有任何意义,因为我不是网络专家。
更新配置图像
想不到别的了。如果其他人有一些线索,请指教。
最佳答案
终于能够让它为一项服务工作。希望人们不必花 3 天的时间来解决这个问题......
有问题的文件位于 C:\Program Files\VMware\vCenter Server\vdcs\vdcserver\conf\server.xml
<Listener accessFile="${catalina.base}/conf/jmxremote.access" authenticate="false" bind="11.168.32.xx" className="com.springsource.tcserver.serviceability.rmi.JmxSocketListener" passwordFile="${catalina.base}/conf/jmxremote.password" port="${base.jmx.port}" useSSL="false"/>
上面的绑定(bind)值似乎覆盖了 wrapper.conf 属性,它早先是 127.0.0.1。并将身份验证更改为 false 似乎可以暂时解决问题。现在需要努力使其更加安全。
关于java - 远程JMX监控 Jconsole JDK 1.7.0_91,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901437/