如何使用jConsole连接远程tomcat JMX实例?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

正尝试使用jConsole连接到远程Tomcat JMX实例,无法连接成功。

我在远程tomcat中包含了以下选项catalina.sh

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.port=9004 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false"
提问于
用户回答回答于

linux上的tomcat解决方案:

使用tomcat 6.0.24或更新的下载catalina-jmx-remote.jar从apache tomcat extras(在tomcat下载页面上使用浏览)将它复制到$ CTALINA_HOME \ lib中

这使可以设置JMX使用的两个端口

编辑server.xml中的服务器部分

<Server port="8005" ..>
  ...
  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9840" rmiServerPortPlatform="9841"/>

设置一些环境变量(例如在setenv.sh中)

CATALINA_OPTS="
  -Djava.rmi.server.hostname=IP-TO-LISTEN
  -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password 
  -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access 
  -Dcom.sun.management.jmxremote.ssl=false"

这会激活JMX的访问控制

jmxremote.access将如下所示

monitorRole readonly
controlRole readwrite

结束jmxremote.password即可

monitorRole tomcat
controlRole tomcat

重新启动tomcat。

现在在服务器上配置防火墙(例如iptables)

/ etc / SYSCONFIG / iptables的

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9841 -j ACCEPT

/ etc / sysconfig / ip6tables

-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9841 -j ACCEPT

重新启动iptables

现在在工作站上使用VisualVM或JConsole建立到我们示例中的rmiRegistryPortPlatform,9840的连接。

如果工作站和服务器之间没有更多的防火墙,它应该可以工作。

用户回答回答于

如果我在本机上启动jconsole,我可以连接到JMX服务器。

看起来RMI服务器没有在正确的IP上进行监听。我添加了以下内容:

-Djava.rmi.server.hostname=<host ip>

扫码关注云+社区

领取腾讯云代金券