java - 为什么即使机器上运行了多个 java 应用程序也没有 JMX 冲突?

标签 java jvm jmx visualvm jprofiler

内存分析器(检测和监控工具)如 VisualVM 和 jProfiler 通过 JMX 扩展连接到 Java 应用程序的 JVM(尽管可能有其他连接方式 - 如 jstatd 等,我已经看到 JMX 很常见)
我对 JMX 的理解:
默认情况下,JMX 必须公开其默认端口(不确定是否有默认端口号),以便内存分析器可以连接。因此,我假设当多个 Java 应用程序使用默认 JMX 配置运行时,在同一台机器上,一定存在 JMX 端口冲突。
但我从来没有注意到这一点。我已经看到 Java 应用程序在默认配置下愉快地运行,并且 Mem Analyzers 可以同时愉快地与这些 Java 应用程序中的每一个连接。所以我对 JMX 端口的理解并不完全正确。有人能说一个以上的 Java 应用程序如何能够在同一台机器上同时公开具有默认配置的 JMX 功能。 (???? 是 JMX 为每个 Java 应用程序使用的随机端口????)

最佳答案

VisualVM 等工具将 JMX 与 Dynamic Attach mechanism 一起使用监视本地 Java 虚拟机。

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

  • 显然,不同的本地 JVM 在不同的端口上启动 Management Server,但 VisualVM 通过动态连接发现端口号。

    关于java - 为什么即使机器上运行了多个 java 应用程序也没有 JMX 冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63729805/

    相关文章:

    java - 如何修复由于时区更改而导致的 MySQL 错误?

    java - 使用和否定数字

    java - 处理:获取PGraphics对象的位置

    java - 什么可能导致Java返回后继续运行

    java - 在生产服务器上启用 jmx(lambda 探针)是个好主意吗?

    java - 在Java中创建多数组

    java - JVM的引用类型

    java - 有没有办法使用 MBean 记录 jvm GC Activity ?

    java - 缺少 Websphere NodeAgent JMX MBean

    java.lang.NoClassDefFoundError : org/eclipse/jetty/server/nio/SelectChannelConnector using com. j256.simplejmx.web.JmxWebServer