2.2 Java虚拟机的监控和管理
JMX技术也可以用于监控和管理Java虚拟机。
Java虚拟机具有内置的监测功能,使得你能够通
过JMX技术来监控和管理它。这些内置的功能通常叫做JVM的拆箱即用式的(out-of-the-box)管理工具。为了监控和管理JVM的不同方
面,JVM包含了一个平台MBean server以及一些特殊的MXBeans,供遵守JMX规范的管理程序使用。
Platform MXBeans和PlatformMBean Server
platform
MXBeans
是由Java SE平台提供的一组MXBeans,用于监控和管理JVM和Java Runtime Environment
(JRE)的其它组件。每个platform MXBean都封装了一部分JVM功能,比如class-loading
system系统、just-in-time (JIT)编译系统、垃圾回收器等等。可
以通过使用一个兼容JMX规范的监控与管理工具来显示这些MXBeans,以及与这些MXBeans进行交互,这样使得你能够监控和管理不同的虚拟机功
能。其中一个这样的监控与管理工具就是Java SE平台的JConsole graphical user interface (GUI)。
Java SE platform提供了一个标准的platform MBean server
,这些platform
MXBeans就注册在其中。平台MBean server也可以注册任何其它你想要创建的MBeans。(提示:
JVM启动的时候,会启动platform MBean server!应用程序可以启动自己的MBean
Server,也可以使用JVM默认启动的platfomr MBean Server)
测试案例:
public class HelloJMX { public static void main(String[] args) throws InterruptedException { Thread.sleep(Long.MAX_VALUE); } }
运行此程序
JConsole
Java SE平台包含了JConsole这个监控与管理工具,它兼容JMX规范。JConsole使用JVM的extensive instrumentation(也就是platform MXBeans)来提供运行于Java平台中的应用程序的性能与资源消耗信息。
Out-of-the-Box Management in Action
因为标准的实现了JMX技术的监控和管理功能是内置于Java SE平台中的,因此你可以直接使用它们,而不需要写一行与JMX API相关的代码。你可以启动一个Java应用程序,然后用JConsolel来监控它。
用JConsole监控应用程序
该过程展示了如何监控Notepad Java程序。在版本6之前的Java SE平台中,需要通过用下面的选项 来启动 你想要用JConsole进行监控的应用程序。
-Dcom.sun.management.jmxremote
然而,Java SE 6 平台提供的那个版本的JConsole可以粘附(attach)到任何支持粘附API的本地应用程序上。换言之,任何在Java SE 6 HotSpot VM中启动的应用程序 都会被JConsole自动探测到,不需要用上面的命令行选项来启动该应用程序。
1、启动Jconsole
输入jconsole之后,可以看到:
2、在新连接对话框中,在本地进程(Local Process)列表中,选择com.tianshouzhi.jmx.HelloJMX
,然后点击 Connect 按钮
当JConsole打开的时候,呈现在你眼前的是关于该HelloJMX
的监控与管理的一个概览。比如,你可以查看该应用程序所消耗的heap memory的数量、当前应用程序的线程数量 以及该应用程序所消耗的CPU量。
3. 点击JConsole中的不同标签页。
每个标签页都展示了HelloJMX所处的JVM的不同功能领域的更详细的信息。所有这些展示的信息,都是通过不同的JMX MXBeans获取,本教程已经提到过。所有的platform MXBeans都被显示在MBeans标签页中。例如在Thread Tab页中,我们看到Main线程:
4. 要想关闭JConsole,请选择 Connection -> Exit。