如何使用 JMX 连接到在 EC2 上运行的 Java 实例
我们在连接到 Amazon 的 EC2 集群中运行的 Java 应用程序时遇到问题。我们肯定已经允许“JMX端口”(通常是RMI注册表端口)和服务器端口(完成大部分工作)到相关实例的安全组。Jconsole连接,但似乎挂起,从不显示任何信息。
我们正在使用如下所示的内容运行Java:
java -server -jar foo.jar other parameters here > java.log 2>&1
我们尝试过:
- 端口的 Telnet 连接,但不显示任何信息。
- 我们可以在实例本身上运行,通过ssh使用remote-X11,它连接并显示信息。因此,JRE正在本地导出它。
jconsole
- 打开安全组中的所有端口。哎呀。
- 用于确保流量不会流向其他端口。
tcpdump
- 在本地模拟它。我们始终可以使用相同的应用程序参数连接到本地 JRE 或运行在网络上其他位置的 JRE。
java -version
输出:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (amazon-53.1.11.5.47.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
顺便说一句,我们正在使用我的Simple JMX软件包,它允许我们设置通常由RMI注册表半随机选择的RMI注册表和服务器端口。您也可以使用以下类似 JMX URI 的内容强制执行此操作:
service:jmx:rmi://localhost:" + serverPort + "/jndi/rmi://:" + registryPort + "/jmxrmi"
如今,我们对服务器和注册表使用相同的端口。在过去,我们用作注册表端口和服务器端口,以使安全组规则变得容易。您可以连接到注册表端口或您正在使用的任何 JMX 客户机。X
X+1
jconsole