我在 Amazon EC2 服务器上运行的 Tomcat 7 进程具有如下设置,CATALINA_OPTS
其中应该允许我远程连接 JMX 监控:
-Dcom.sun.management.jmxremote.port=8086
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
然而,远程连接无法通过 jconsole 或 jvisualvm 进行。它只是超时了。
我已三次检查 EC2 安全组是否允许从我的 IP(且只能从我的 IP)访问 JMX 远程端口。
是否缺少任何设置?
答案1
指定java.rmi.服务器.主机名选项,以便它指向公共 DNS 名称您的 EC2 服务器:
-Djava.rmi.server.hostname=your.public.dns
这足以让它为我工作,但要获得更多提示,请尝试此博客文章:
Amazon EC2 上的 JMX 监控
答案2
这里有更完整的解释说明如何在不干扰组安全(又名防火墙)的情况下做到这一点:
服务器端:
- 下载http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.23/bin/extras/catalina-jmx-remote.jar并将其放在 tomcat/lib 中
在 server.xml 中添加以下监听器:
<listener classname="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiregistryportplatform="10001" rmiserverportplatform="10002" uselocalports="true" />
在 tomcat/bin/setenv.sh 中添加以下设置:
CATALINA_OPTS="-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate = false” 导出 CATALINA_OPTS
重启 tomcat
客户端:
- 下载相同的 catalina-jmx-remote.jar 并将其放入 JDK/JRE/lib/ext 中(与服务器步骤 1 中下载的文件相同)
使用以下命令启动 ssh 隧道:
ssh 用户@aws-host -L10001:127.0.0.1:10001 -L10002:127.0.0.1:10002
启动 JConsole 并输入以下远程服务 URL:
服务:jmx:rmi://127.0.0.1:10002/jndi/rmi://127.0.0.1:10001/jmxrmi
您已通过 SSH 将 JConsole 连接到在 AWS 上运行的 tomcat。
发布日期:http://www.cod.ro/2012/08/monitoring-tomcat-7-on-rhel-aws-using.html
答案3
如果您在设置正确的主机名时遇到问题,请java.rmi.server.hostname
尝试以下操作:
-Djava.rmi.server.hostname=$(/usr/bin/curl -s --connect-timeout 2 instance-data.ec2.internal/latest/meta-data/public-hostname)
这在实例来来去去的 Elastic Beanstalk 环境中使用起来很方便。
答案4
我也尝试使用 JmxRemoteLifecycleListener,但它对我来说不起作用。
这对我来说是有用的:
我选择 1005 作为 JMX 端口,我的端口
setenve.sh
是这样的:CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10005 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost"
使用 SSH 重定向 JMX 端口和 RMI
使用以下 URI 运行 visualvm:
service:jmx:rmi:///jndi/rmi://localhost:10005/jmxrmi
如果您需要更多信息,请查看此帖子: http://ignaciosuay.com/how-to-connect-a-java-profiler-like-visualvm-or-jconsole-to-a-remote-tomcat-running-on-amazon-ec2/