我们在连接到在 Amazon 的 EC2 集群中运行的 Java 应用程序时遇到问题。我们肯定已经允许“JMX 端口”(通常是 RMI 注册端口)和服务器端口(完成大部分工作)到相关实例的安全组。Jconsole 连接但似乎挂起并且从不显示任何信息。
我们正在运行我们的java,如下所示:
java -server -jar foo.jar other parameters here > java.log 2>&1
我们尝试过:
- Telnet 到端口连接,但未显示任何信息。
- 我们可以
jconsole
通过 ssh 使用 remote-X11 在实例本身上运行,它会连接并显示信息。因此,JRE将其导出到本地。 - 打开安全组中的所有端口。哎呀。
- 用于
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"
如今,我们为服务器和注册表使用相同的端口。过去,我们使用X
注册表端口和X+1
服务器端口来简化安全组规则。您连接到注册表端口jconsole
或您正在使用的任何 JMX 客户端。