2012-08-26 81 views
4

我在Spring3.1独立环境下开发。不能连接JMX远程与jconsole

我想通过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 /> 
现在

的Linux机器上做的netstat后,那是什么,我们看到:

[[email protected] logs]# netstat -an | grep 6969 
tcp  0  0 :::6969      :::*      LISTEN 

,所以它看起来像它不听。

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

任何想法我做错了什么?

谢谢, 射线。

回答

5

第一次尝试也是这个选项添加到您的应用程序:

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

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

1
  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好吃的东西。