我是在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时,我得到连接失败的弹出窗口。
知道我做错了什么?
感谢, 射线。
答案 0 :(得分:6)
首先尝试将此选项添加到您的应用程序中:
-Djava.rmi.server.hostname=<ip>
另外请记住,jconsole正在使用RMI进行通信。这意味着jconsole首先连接到ip:6969。然后,服务器生成一个随机端口X,并将其传递回jconsole。然后Jconsole打开另一个到ip:X的连接。由于X是随机的,因此无法在防火墙中打开此特定端口。您要么打开所有端口,要么使用另一个主题的socks代理。
答案 1 :(得分:2)
尝试使用您计算机上的telnet连接到该端口。如果这不成功,通常是因为防火墙丢弃数据包。您必须与网络管理员联系以打开该端口。
注意:您必须打开两个端口。一个用于绑定RMIRegistry,另一个用于导出RMI对象。 RMI通常在随机高端口上导出对象。但是这在防火墙环境中不起作用,因此您必须配置导出它的端口。这是通过使用RMI URL完成的。
如果您在Linux上运行此操作,请执行hostname -i
,如果它返回127.0.0.1,则修复/etc/hosts
。 The FAQ entry for JConsole有更多相关信息。
我强烈建议的另一个选择是查看Jolokia,它不涉及更改防火墙配置,但仍然通过HTTP提供JMX好东西。