使用 jConsole 连接远程 tomcat JMX 实例

2022-08-31 17:27:23

我正在尝试使用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"

答案 1

我有一个类似的问题,如果不是一样的话。如果我在机器上本地启动 jconsole,我可以连接到 JMX 服务器。

RMI 服务器似乎没有侦听正确的 IP。因此,正如这个相关问题所建议的那样,我添加了以下内容:

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

以及,然后它工作了。JAVA_OPTS


答案 2

我收集了通过网络传播的信息,并从其他成员那里找到了提示。

JMX引起的大多数痛苦是(imo)JMX打开第二个动态分配的网络端口的事实。防火墙(如iptables)将阻止此操作。

Linux上的tomcat解决方案:

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

这允许您设置 JMX 使用的两个端口

编辑服务器部分中的服务器部分.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

end jmxremote.password 將是

monitorRole tomcat
controlRole 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(在我们的示例中)的连接。

如果工作站和服务器之间不再有防火墙,它应该可以正常工作。


推荐