这个问题不是关于 JMX 如何工作或 JMX 做什么的。据我所知,除了使用 JMX 之外,我们还可以获得操作系统级别的指标和 JVM 特定的指标(例如:垃圾收集时间和频率、堆利用率等)
我的问题是 Java 应用程序中的 JMX 可以监控哪些方面(内部指标)?
最佳答案
在运行时监控应用的状态
Java Management Extensions (JMX)是您在自己的应用程序中嵌入代码以在运行时报告应用程序操作状态的标准方法。
这种将报告代理(“探针”)嵌入到更大的软件中的方式被称为 “instrumenting” your code 。 JMX 使您能够使用一个框架在运行时显示这些静态信息,因此您无需自己发明报告系统管道。在运行时,您或您的系统管理员可以使用许多标准监控应用程序中的任何一个,这些应用程序有时称为“控制台”或“仪表板”。
JMX 负责将更新传输到监控应用程序,而无需您进行任何额外的编程。监控应用程序不必位于本地,而是可以通过网络远程运行。您的系统管理员选择哪个监控应用程序以及他们选择在何处运行它,不会影响您应用程序中的代码。 JMX 是一个缓冲区,一个间接层,将编译时代码与这些实际的运行时配置问题分开。
目的是提供control room像this ,但对于您的软件:
这里的主要优势是使用标准协议(protocol)来报告状态,而不是您发明自己的协议(protocol)。
应用服务器
如果您的应用程序是 Web 应用程序,则您的 Jakarta EE 服务器或 Web 容器,例如 Tomcat或者 Jetty 可以使用 JMX 进行检测。这样您就可以监控其操作。例如,您可以查看当前打开的用户 session 。
JVM
一些JVM实现本身使用 JMX 来报告 JVM 操作各个方面的状态。正如您的问题所提到的,其中一些报告可能与内存使用情况、垃圾收集器 Activity 等有关。您的系统管理员的监控应用程序可以监视 JVM 和您的应用程序,每个报告一个状态更新流。
操作系统
您的操作系统也可能会报告其内部操作,尽管不太可能使用 JMX。用于此目的的一个强大的动态跟踪框架是 DTrace ,内置于 macOS、FreeBSD 和 Solaris。
因此,您的系统管理员可能正在监视其监控应用程序上的所有四组状态信息:操作系统、JVM、应用程序服务器和您的应用程序。
阅读the Wikipedia page了解基本信息。
读写
JMX 不仅提供读取访问来监视当前状态,还提供写入。您选择的外部监控应用程序可用于以您在编程中选择的任何方式更改应用程序内的状态。例如,您可以更改线程池或缓存的大小。
继续我们上面看到的控制室的比喻,您可以将通过 JMX 的读取访问视为观看控制室面板上的仪表。
将写入访问视为转动这些面板上的旋钮、开关和 slider 。
关于java - 在 Java 应用程序中使用 JMX 监控什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51442765/