首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

在 Java SE 6 中监视和诊断性能有关问题[转]

2012-10-30 
在 Java SE 6 中监视和诊断性能问题[转]Overview 选项卡显示了 4 个反映 VM 资源使用情况的图形以及一个挑

在 Java SE 6 中监视和诊断性能问题[转]


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

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

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


图 2. JConsole VM Summary 选项卡
在 Java SE 6 中监视和诊断性能有关问题[转]

MBeans 选项卡进行了增强,可以更轻松地访问 MBean 的操作和属性。它显示所有

选择 Attributes

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


图 5. 展开的属性值
在 Java SE 6 中监视和诊断性能有关问题[转]

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

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


图 6. MBean 操作
在 Java SE 6 中监视和诊断性能有关问题[转]

HotSpot Diagnostic MBean

在 Java SE 6 中,JConsole 提供了对 HotSpot Diagnostic MBean 的支持。这个引入的 MBean 允许您执行 on-the-spot 诊断操作。其 API 允许

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

回页首

监视和故障排除工具

除 JConsole 外,Java SE 6 还提供了对其他命令行工具的支持。这些诊断工具可以连接到任何应用程序而不要求应用程序以特殊模式启动。它们使您能够获得更多应用程序信息,从而确定它是否按预期运行。注意,列出的这些工具仍处于实验性质,未来的 Java SE 版本未必能够提供完全的支持。

监视工具

Java SE 6 包括了三个命令行工具,如表 2 所示,这些工具可用于监视 JVM 性能统计信息:


表 2. 监视工具
工具说明jinfo配置信息jhat堆转储浏览器jmap内存映射jsadebugd服务能力代理调试程序jstack堆栈跟踪

jinfo 命令行工具从运行中的 Java 进程或崩溃转储(crash dump)中获取配置信息,并对系统属性和用于启动虚拟机的标记进行打印。

jhat 工具提供了一种方便的方法,可以在堆快照中浏览对象结构。Java SE 6 版本中引入的这个工具可以取代 Heap Analysis Tool (HAT),有助于检测内存泄漏。

jmap 命令行工具为运行中的 VM 或核心文件打印与内存有关的统计信息。该工具还可以使用 jsadebugd 守护程序查询远程机器中的进程或核心文件。jmap 工具可检测出是否过度使用了完成器,后者可导致出现 OutOfMemoryError 错误。

Serviceability Agent Debug Daemon (jsadebugd) 连接到一个 Java 进程或一个核心文件,并充当一个调试服务器。该工具当前只能用于 Solaris OS 和 Linux?。诸如 jstack、jmap 和 jinfo 这样的远程客户机可以通过 Java RMI 连接到这种服务器上。

jstack 命令行工具连接到指定的进程或核心文件,并打印所有连接到虚拟机的线程的堆栈跟踪信息,包括 Java 线程和 VM 内部线程,有时也包括本地堆栈框架。该工具还执行死锁检测。它使用 jsadebugd 守护程序查询远程机器上的进程或核心文件。jstack 工具可用于检测死锁问题。

关于这些工具的更多文档和使用示例,请参考 参考资料。


回页首

结束语

Java 6 平台对 VM 测试、管理 API 和 JDK 工具提供了一些增强,可帮助有效地确定和诊断 Java 应用程序中的性能和内存问题。本文介绍了对 Java SE 监视和管理框架添加的增强以及为开发人员提供的诊断命令行工具。

Java 应用程序的平均性能随时间稳步提高。现在,使用 Java SE 6 版本,Java 性能可与 C 或 C++ 相媲美。在很多情况下,Java 代码的运行速度显著提升。您还可以使用本文介绍的工具实现更好的性能优化。请您亲自尝试。我们可以确保帮您找到以前从未进行过的应用程序优化。


参考资料

学习

您可以参阅本文在 developerWorks 全球站点上的 英文原文 。“使用 Java 平台管理 bean”(May Glover Gunn,George Harley 和 Caroline Gough,developerWorks,2006 年 4 月):有关 MXBean 的更详细信息。“Java SE 6 新特性: JMX 与系统管理”(developerWorks,2007 年 7 月):介绍了 Java 管理扩展(Java Management Extension,JMX) 架构及其框架,以及在 Java SE 5 中新引入的 JMX API -- java.lang.management 包, 还讲述了此 API 在 Java SE 6 中的相关改进和对未来版本的展望。“Monitoring and Managing Java SE 6 Platform Applications”(Mandy Chung,Sun Developer Network,2006 年 8 月):介绍了如何在 Java SE 中诊断常见性能问题。java.lang.management API:查看这种 API,满足 Java 监视和管理开发需求。JDK Tools and Utilities:查看 Sun 的站点,了解 Java SE 6 中包含的工具。jps、jstat、jstatd、jinfo、jhat、jmap、jsadebugd和 jstack:有关本文介绍的监视和故障排除工具的文档和示例。浏览 技术书店 查找有关这些主题以及其他技术主题的图书。developerWorks Java 技术专区:提供了有关 Java 编程各个方面的数百篇文章。

讨论

通过参与 developerWorks blogs 加入 developerWorks 社区。

作者简介

Cathy Kegley 是 IBM Lotus Expeditor Client 团队的一名软件工程师。


Greg Roberts 是 IBM Lotus Expeditor 客户机开发团队的软件工程师。



Discuz! BoardWeb Service开发:Java Web Service.pdf

热点排行