与在 Amazon EC2 上运行的 Tomcat 的 JMX 连接

与在 Amazon EC2 上运行的 Tomcat 的 JMX 连接

我在 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

这里有更完整的解释说明如何在不干扰组安全(又名防火墙)的情况下做到这一点:

服务器端:

  1. 下载http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.23/bin/extras/catalina-jmx-remote.jar并将其放在 tomcat/lib 中
  2. 在 server.xml 中添加以下监听器:

    <listener classname="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
        rmiregistryportplatform="10001" 
        rmiserverportplatform="10002" 
        uselocalports="true" />
    
  3. 在 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

客户端:

  1. 下载相同的 catalina-jmx-remote.jar 并将其放入 JDK/JRE/lib/ext 中(与服务器步骤 1 中下载的文件相同)
  2. 使用以下命令启动 ssh 隧道:

    ssh 用户@aws-host -L10001:127.0.0.1:10001 -L10002:127.0.0.1:10002

  3. 启动 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,但它对我来说不起作用。

这对我来说是有用的:

  1. 我选择 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"
    
  2. 使用 SSH 重定向 JMX 端口和 RMI

  3. 使用以下 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/

相关内容