猿问
下载APP

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

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

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



ITMISS
浏览 46回答 3
3回答

桃花长相依

首先,您需要检查您的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 coneection。这是港口1234。

芜湖不芜

以及下面的命令行参数,-Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false有时在linux服务器上,imx连接不会成功。那是因为,在cloud linux主机中,在/ etc / hosts中,以便主机名解析为主机地址。修复它的最好方法是从网络中的其他机器ping特定的Linux服务器并使用该主机IP地址-Djava.rmi.server.hostname=IP address that obtained when you ping that linux server.但是永远不要依赖使用ifconfig.me从linux服务器获得的ipaddress。你到达那里的ip是掩码的,它存在于主机文件中。

交互式爱情

在Docker容器中运行引入了一大堆额外的连接问题,所以希望这有助于某人。我最后需要添加以下选项,我将在下面解释:-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${DOCKER_HOST_IP} -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9998DOCKER_HOST_IP与在本地使用jconsole不同,您必须通告一个与容器中可能看到的不同的IP。您需要${DOCKER_HOST_IP}使用Docker主机的外部可解析IP(DNS名称)进行替换。JMX远程和RMI端口看起来JMX还需要访问远程管理接口(jstat),该接口使用不同的端口在仲裁连接时传输一些数据。我没有看到任何立即显而易见的jconsole设置此值。在链接的文章中,该过程是:尝试jconsole启用日志记录并从中进行连接失败找出jconsole尝试使用的端口根据需要使用iptables/ firewallrules以允许该端口连接虽然这有效,但它肯定不是一个可自动化的解决方案。我选择从jconsole升级到VisualVM,因为它让你明确指定jstatd正在运行的端口。在VisualVM中,添加一个新的远程主机并使用与上面指定的值相关的值更新它:然后右键单击新的远程主机连接和 Add JMX Connection...别忘了勾选复选框Do not require SSL connection。希望,这应该允许您连接。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答