如何在JVM上激活JMX以使用jconsole进行访问?


当前回答

我有这个确切的问题,并创建了一个GitHub项目来测试和找出正确的设置。

它包含一个工作Dockerfile和支持脚本,以及一个简单的docker-compose。Yml快速测试。

其他回答

我有这个确切的问题,并创建了一个GitHub项目来测试和找出正确的设置。

它包含一个工作Dockerfile和支持脚本,以及一个简单的docker-compose。Yml快速测试。

使用以下命令行参数运行java应用程序:

-Dcom.sun.management.jmxremote.port=8855
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

使用-Dcom.sun.management.jmxremote非常重要。如果不想在JMX主机上设置数字证书,则使用Ssl =false参数。

如果在IP地址为192.168.0.1的机器上启动应用程序,则打开jconsole,在Remote Process字段中输入192.168.0.1:8855,然后单击Connect。

步骤1:使用以下参数运行应用程序。

-Dcom.sun.management.jmxremote.port=9999 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

上述参数将应用程序绑定到端口9999。

步骤2:在命令提示符或终端中执行命令jconsole来启动jconsole。

选择“远程进程:”并输入url为{IP_Address}:9999,然后单击连接按钮连接到远程应用程序。

您可以参考此链接以获得完整的应用程序。

首先,您需要检查java进程是否已经使用JMX参数运行。这样做:

ps -ef | grep java

检查您需要监视的java进程。如果你能看到jmx rmi参数Djmx.rmi.registry。Port =xxxx,然后在Java visualvm中使用这里提到的端口在JMX连接下远程连接它。

如果它没有通过jmx rmi端口运行,那么你需要使用以下提到的参数运行你的java进程:

-Djmx.rmi.registry.port=1234 -Djmx.rmi.port=1235 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

注意:端口号基于您的选择。

现在您可以将此端口用于jmx连接。这里是1234端口。

连同下面的命令行参数,

-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

在linux服务器上,有时imx连接不成功。这是因为,在云Linux主机中,在/etc/hosts中使主机名解析为主机地址。

修复它的最好方法是,从网络中的其他机器ping特定的linux服务器,并使用该主机IP地址

-Djava.rmi.server.hostname=IP address that obtained when you ping that linux server.

但是永远不要依赖于你从linux服务器上使用ifconfig.me获得的ipaddress。你得到的IP是掩码的,在主机文件中。