Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在机器上运行多个java应用程序时也没有JMX冲突?_Java_Jvm_Jmx_Visualvm_Jprofiler - Fatal编程技术网

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

为什么在机器上运行多个java应用程序时也没有JMX冲突?,java,jvm,jmx,visualvm,jprofiler,Java,Jvm,Jmx,Visualvm,Jprofiler,内存分析器(检测和监视工具),比如VisualVM和jProfiler,通过JMX扩展连接到Java应用程序的JVM(尽管可能有其他连接方式,比如jstatd等,我已经看到JMX非常常见) 我对JMX的理解: 默认情况下,JMX必须公开其默认端口(不确定是否有默认端口号),以便内存分析器可以连接。因此,我假设在同一台机器上,当多个java应用程序使用默认JMX配置运行时,一定存在JMX端口冲突 但我从未注意到这一点。我已经看到java应用程序在默认配置下运行得很好,而Mem分析器可以同时愉快地连

内存分析器(检测和监视工具),比如VisualVM和jProfiler,通过JMX扩展连接到Java应用程序的JVM(尽管可能有其他连接方式,比如jstatd等,我已经看到JMX非常常见)

我对JMX的理解:
默认情况下,JMX必须公开其默认端口(不确定是否有默认端口号),以便内存分析器可以连接。因此,我假设在同一台机器上,当多个java应用程序使用默认JMX配置运行时,一定存在JMX端口冲突


但我从未注意到这一点。我已经看到java应用程序在默认配置下运行得很好,而Mem分析器可以同时愉快地连接到这些java应用程序中的每一个。因此,我对JMX端口的理解并不完全正确。有人会说,多个java应用程序如何能够在同一台机器上同时使用默认配置公开JMX功能。(???是JMX为每个java应用程序使用的随机端口???)

像VisualVM这样的工具将JMX与一起用于监视本地java虚拟机

  • 首先,该工具通过连接到本地JVM
  • 然后,它执行(也通过附加API)命令,以在目标JVM中启动管理代理(JMX服务器)
  • 目标JVM在某个空闲端口上启动管理代理,并在代理属性中设置打开的端口值
  • 该工具再次使用Attach API读取代理属性,从而发现代理侦听的端口
  • 然后,它在此端口上建立与管理代理的JMX连接

  • 显然,不同的本地JVM会在不同的端口上启动管理服务器,但VisualVM会通过动态连接发现端口号。

    您好,Joveny,欢迎光临。我想你应该读这篇文章。您可以使用标志定义imx端口。