无法通过远程 JMX 连接

无法通过远程 JMX 连接

我尝试通过添加 JVM args 在服务器上运行的 Java 应用程序上启用 JMX 远程处理-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx,但无法连接到该应用程序。不知道应用程序是否以某种方式搞乱了它,我编写了一个简单的测试应用程序:

public class Main {
    public static void main(String[] args) {
        while (true) {
            try {
                System.out.println("Sleeping for 5 seconds...");
                Thread.sleep(5000);
            }
           catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

但是,我也无法连接到该应用程序。iptables 显示 9001 上有一个开放端口,netstat 确认已建立连接,但 Jconsole(和一个简单的 Groovy 脚本)由于超时而失败。

由于到目前为止我的故障排除都失败了,我一直在寻找让 Jconsole 连接的其他方法。解决方案包括安装新的 Web 服务器并通过它路由 JMX,但这对我来说可能不可行。盒子上有一个 Web 服务器,但它是 Hiawatha,我无法更改它或安装另一个。我错过了什么?

答案1

尝试以下步骤进行故障排除并报告:

  1. 您可以telnet xxx.xxx.xxx.xxx 9001从运行 jconsole 的地方使用它。您应该看到:

    连接到 xxx.xxx.xxx.xxx 转义字符为 '^]'。

如果您确实看到了,那么这意味着您有一个 TCP 连接,因此防火墙不是问题。

  1. 在服务器上运行以下命令并发布输出:

    $ netstat -an | grep 收听 | grep 9001 tcp6 0 0 :::9001 :::* 监听

你的课程和命令行:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Main

对我来说工作正常,我可以连接到 jconsole。

  1. 您能否检查一下您要监控的主机正在运行哪个版本的Java?java -version

相关内容