我需要使用 JMX 监控我的 VCenter Server 应用程序(它是一个 Java 应用程序)。
我已经看过很多关于这个的帖子并遵循了,但我仍然无法让它工作。
VCenter 正在我们内部网络上的 VM 上运行。
在 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) telnet 到 1100 在我的笔记本电脑上工作
3) 尝试将 jmxremote_optional.jar 复制到 VMWARE_JAVA_HOME\lib,即 C:\Program Files\VMware\vCenter Server\jre\lib 根据这篇文章 https://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/
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/