为什么在机器上运行多个java应用程序时没有jmx冲突?

a14dhokn  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(447)

内存分析器(工具和监视工具)如visualvm和jprofiler通过jmx扩展连接到java应用程序的jvm(尽管可能有其他连接方式,如jstatd等,我已经看到jmx是非常常见的)
我对jmx的理解:
默认情况下,jmx必须公开其默认端口(不确定是否有默认端口号),以便内存分析器可以连接。因此,我假设在同一台机器上,当多个java应用程序以默认jmx config运行时,一定会有jmx端口冲突。
但我从没注意到。我看到java应用程序在默认配置下运行得很好,mem analyser可以同时愉快地连接到这些java应用程序中的每一个。所以我对jmx端口的理解并不完全正确。有人能说一个以上的java应用程序是如何在同一台机器上同时公开带有默认配置的jmx功能的吗????是jmx为每个java应用程序使用的随机端口??)

zengzsys

zengzsys1#

像visualvm这样的工具使用jmx和动态连接机制来监视本地java虚拟机。
首先,该工具通过attach api连接到本地jvm。
然后它执行(也通过attachapi)一个命令来启动目标jvm中的管理代理(jmx服务器)。
目标jvm在某个空闲端口上启动管理代理,并在代理属性中设置opened port值。
该工具再次使用attach api读取代理属性,从而发现代理侦听的端口。
然后在这个端口上建立到管理代理的jmx连接。
显然,不同的本地JVM在不同的端口上启动管理服务器,但是visualvm通过动态连接发现端口号。

相关问题