【问题标题】:Couldnt connect to JMX remote with jconsole无法使用 jconsole 连接到 JMX 远程
【发布时间】:2012-08-26 07:22:08
【问题描述】:

我在 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 时,我得到连接失败弹出窗口。

知道我做错了什么吗?

谢谢, 射线。

【问题讨论】:

    标签: java linux spring jmx spring-3


    【解决方案1】:

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

    -Djava.rmi.server.hostname=&lt;ip&gt;

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

    【讨论】:

      【解决方案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 好东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-01
        • 2010-11-18
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多