无法使用jconsole连接到JMX远程

时间:2012-08-26 07:22:09

标签: java linux spring jmx spring-3

我是在Spring3.1独立环境下开发的。

我正在尝试通过jconsole远程连接我的应用程序。 它在本地工作但是当我将我的应用程序部署到linux机器时它会有时间。

我正在使用守护进程来运行我的环境。

这是我在run.sh脚本中添加的内容:

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=6969 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
com.mypackage.daemon.FixDaemon

和applicationContext.xml:

<context:mbean-server />
<context:mbean-export />

现在在做netstat之后的linux机器上就是我们所看到的:

[root@ logs]# netstat -an | grep 6969
tcp        0      0 :::6969                     :::*                        LISTEN

所以看起来好像在听。

但是当我在jconsole界面中添加我的ip:6969时,我得到连接失败的弹出窗口。

知道我做错了什么?

感谢, 射线。

2 个答案:

答案 0 :(得分:6)

首先尝试将此选项添加到您的应用程序中:

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

另外请记住,jconsole正在使用RMI进行通信。这意味着jconsole首先连接到ip:6969。然后,服务器生成一个随机端口X,并将其传递回jconsole。然后Jconsole打开另一个到ip:X的连接。由于X是随机的,因此无法在防火墙中打开此特定端口。您要么打开所有端口,要么使用另一个主题的socks代理。

答案 1 :(得分:2)

  1. 尝试使用您计算机上的telnet连接到该端口。如果这不成功,通常是因为防火墙丢弃数据包。您必须与网络管理员联系以打开该端口。

    注意:您必须打开两个端口。一个用于绑定RMIRegistry,另一个用于导出RMI对象。 RMI通常在随机高端口上导出对象。但是这在防火墙环境中不起作用,因此您必须配置导出它的端口。这是通过使用RMI URL完成的。

  2. 如果您在Linux上运行此操作,请执行hostname -i,如果它返回127.0.0.1,则修复/etc/hostsThe FAQ entry for JConsole有更多相关信息。

  3. 我强烈建议的另一个选择是查看Jolokia,它不涉及更改防火墙配置,但仍然通过HTTP提供JMX好东西。