无法使用jconsole连接JMX远程服务

4

我正在开发基于Spring3.1的独立环境。

我尝试通过jconsole远程连接我的应用程序。在本地工作正常,但当我将应用程序部署到Linux机器上时,它会超时。

我正在使用Daemon来运行我的环境。

这是我在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 命令后,我们看到以下内容:
[root@ logs]# netstat -an | grep 6969
tcp        0      0 :::6969                     :::*                        LISTEN

看起来它好像在监听。

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

你有什么想法是我做错了什么吗?

谢谢, 雷。

2个回答

6

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

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

请注意,jconsole使用RMI进行通信。这意味着jconsole首先连接到ip:6969。然后服务器生成一个随机端口X,该端口X传递回jconsole。然后,jconsole再次连接到ip:X。由于X是随机的,因此无法在防火墙中打开此特定端口。您必须打开所有端口或使用socks代理。


2
  1. 尝试使用telnet从您的计算机连接到该端口。如果连接不成功,通常是因为防火墙丢弃了数据包。您需要与网络管理员交谈以打开该端口。

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

  2. 如果您在Linux上运行,则执行hostname -i,如果返回127.0.0.1,则修复/etc/hosts有关JConsole的常见问题解答提供了更多信息。

  3. 我强烈建议您查看Jolokia,它不涉及更改防火墙配置,但仍可通过HTTP提供JMX好处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接