JConsole

参考:

http://www.ibm.com/developerworks/cn/java/j-java6perfmon/index.html

Java SE 6 提供了对 JConsole 的正式支持,这是 Java 5 SE 中引入的监视和管理控制台。JConsole 使您能够在运行时监视各种 JVM 资源统计信息。这种特性特别适用于检测死锁、锁竞争、内存泄漏和循环线程。它可以连接到一个本地或远程 JVM 并可用来进行监视:

  • 线程状态(包括相关的锁)
  • 内存使用情况
  • 垃圾收集
  • 运行时信息
  • JVM 信息

以下小节将介绍 Java SE 6 对 JConsole 做出的增强。有关如何启动和使用 JConsole 的更多信息,请参阅 参考资料

1 Attach API 支持

从 Java SE 6 开始,JConsole 实现了新的 Attach API。该 API 由两个包组成 — com.sun.tools.attach 和com.sun.tools.attach.spi — 可将应用程序的实现过程动态连接到目标虚拟机并在 JVM 内运行代理。

过去,对于要使用 JConsole 进行监视的应用程序,要求使用 -Dcom.sun.management.jmxremote 选项启动;现在,应用程序不再需要使用这个选项启动。对动态连接的支持使 JConsole 能够监视任何支持 Attach API 的应用程序。JConsole 在启动时将自动检测兼容的应用程序。

 

2 增强的 UI 和 MBean 表示

Java SE 6 对 JConsole 进行了更新,使它具有类似于 Windows® 操作系统或 GNOME 桌面的感观(取决于所运行的平台)。后文中显示的屏幕截图使用的是 Windows XP 并展示了与之前版本不同的 UI 特性。

一旦启动并与应用程序相关联,将显示由 6 个选项卡组成的 JConsole 视图。每个选项卡表示一个不同的 JVM 资源或一组资源:

  • Overview
  • Memory
  • Threads
  • Classes
  • VM Summary
  • MBeans

Overview 选项卡以图形的格式显示有关内存使用、线程、类和 CPU 使用情况的信息。Overview 选项卡在一个页面中显示了一组相关信息,而在以前需要在多个选项卡之间进行切换才能显示。图 1 展示了一个示例应用程序的 Overview 选项卡:

图 1. JConsole Overview 选项卡
JConsole Overview 选项卡 

Overview 选项卡显示了 4 个反映 VM 资源使用情况的图形以及一个挑选列表,可以修改显示结果的时间范围。第一幅图像 Heap Memory Usage 显示堆内存量,随时间流逝以 GB 的单位增加。该图有助于检测内存泄漏。如果您的应用程序出现了内存泄漏,堆内存使用量将随时间稳步增长。

Threads 图形随时间的增长描绘活动线程的数量,而 Classes 图形描绘所装载的类的数量。CPU Usage 图表描述应用程序在其生命周期的不同时间点的 CPU 使用百分比。

图 2 显示的 VM Summary 选项卡是对 Java SE 6 版本的另一个新的增强。它提供了有关 JVM 的详细信息,包括总的运行时间、线程信息、装载的类、内存统计信息、垃圾收集和操作系统信息。

图 2. JConsole VM Summary 选项卡
JConsole VM Summary 选项卡 

MBeans 选项卡进行了增强,可以更轻松地访问 MBean 的操作和属性。它显示所有注册到平台中的 MBean 的信息,通过该选项卡可以访问所有平台 MBeans。左侧的树结构显示当前运行的所有 MBean。当选择一个 MBean 时,其 MBeanInfo 和描述符将显示在右侧的表中,如图 3 所示:

图 3. JConsole MBean 选项卡
JConsole MBean 选项卡 

选择 Attributes 节点将显示 MBean 的所有属性,如图 4 所示的 Threading MBean:

图 4. MBean 属性
MBean 属性 

注意,方框右侧的属性及其值对应于通过前文介绍的 java.lang.management 包的 ThreadMXBean API 获得的属性值,通过双击属性值可获得所列属性的其他信息,只有粗体显示的属性值可被展开。例如,双击 AllThreadIds 值将显示 22 个线程的线程 ID,如图 5 所示:

图 5. 展开的属性值
展开的属性值 

可写的属性以蓝色显示并可以通过单击它们进行编辑并输入新值。例如,图 5 所示的 ThreadContentionMonitoringAvailable 属性就可以以这种方式在 JConsole 视图中进行编辑。

选择左侧树结构中的 Operations 节点将显示与该 MBean 有关的操作。MBean 操作以按钮的形式显示在右侧的区域中,并且当单击时将调用指定的方法。图 6 显示了可用于 ThreadMXBean 的操作:

图 6. MBean 操作
MBean 操作 

 


3 HotSpot Diagnostic MBean

在 Java SE 6 中,JConsole 提供了对 HotSpot Diagnostic MBean 的支持。这个引入的 MBean 允许您执行 on-the-spot 诊断操作。其 API 允许用户在运行时执行堆转储并设置其他 VM 选项。您可以从 MBean 选项卡访问 HotSpot Diagnostic MBean,方法为展开com.sun.management 节点并选择 HotSpotDiagnostic。图 7 显示了可用于 HotSpot Diagnostic MBean 的方法:

图 7. HotSpot Diagnostic MBean
HotSpot Diagnostic MBean 

 


4 JConsole 插件支持

从 Java SE 6 开始,JConsole 提供了插件支持,允许您构建自己的插件来和 JConsole 一起运行。例如,您可以向 JConsole 主视图添加一个自定义选项卡,用于访问特定于应用程序的 MBeans 并执行自己的监视活动。

您必须扩展抽象的 com.sun.tools.jconsole.JConsolePlugin 类,创建一个自定义的 JConsole 插件。您将为插件实现 2 个方法,使之正确显示在 JConsole 视图中:

  • newSwingWorker() 返回 SwingWorker 对象,它将对插件执行 GUI 更新。
  • getTabs() 返回被添加到 JConsole 窗口中的选项卡图。

JConsole 使用其服务提供者机制检测并装载所有插件类。因此,您必须为包含 META-INF/services/com.sun.tools.jconsole.JConsolePlugin 文件的 JAR 文件提供插件类。该文件应当包含一组完全符合规则的插件类名,其中每行显示一个类名。要将新插件装载到 JConsole 视图,使用以下命令在命令行中运行 JConsole:

jconsole -pluginpath plugin_path

命令中的 plugin_path 指目录路径或者 JConsole 插件的归档。您可以指定多条路径。

Java SE 6 附带了一个示例 JConsole 插件,称为 JTop。JTop 将显示当前应用程序内运行线程的 CPU 使用情况。要运行 JConsole 和 JTop,执行下面的命令:

jconsole -pluginpath JAVA_HOME/demo/management/JTop/JTop.jar

图 8 展示了 JConsole 的一个实例,它选择了 JTop 选项卡。左列显示了所有运行线程的名称。对于每个线程,将显示它的 CPU 使用情况和线程状态。当统计信息发生变化时,视图将自动刷新。JTop 插件可用于通过高 CPU 使用量识别线程。

图 8. JConsole JTop 插件
JConsole JTop 插件 


5 远程监控

参考:

http://www.linuxidc.com/Linux/2013-01/77511.htm

 

跟踪统计

JConsole 有许多对收集统计数据有用的选项卡,包括:

  • Memory:在 JVM 垃圾收集器中针对各个堆跟踪活动。
  • Threads:在目标 JVM 中检查当前线程活动。
  • Classes:观察 VM 已加载类的总数。

这些选项卡(和相关的图表)都是由每个 Java 5 及更高版本 VM 在 JMX 服务器上注册的 JMX 对象提供的,是内置到 JVM 的。一个给定 JVM 中可用 bean 的完整清单在 MBeans 选项卡上列出,包括一些元数据和一个有限的用户界面来查看数据或执行操作。(然而,注册通知是在 JConsole 用户界面之外。)


为离线分析创建一个堆转储

先找到 MBeans 选项卡,在其中打开 com.sun.management 节点,接着是 HotSpotDiagnostic 节点。现在,选择 Operations,注意右边面板中的 “dumpHeap” 按钮。如果您在第一个(“字符串”)输入框中向 dumpHeap 传递一个文件名来转储,它将为整个 JVM 堆照一个快照,并将其转储到那个文件。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值