`

【转帖】关于 Java 性能监控您不知道的 5 件事,第 1 部分

阅读更多
原文地址: http://www.ibm.com/developerworks/cn/java/j-5things7.html

 

关于 Java 性能监控您不知道的 5 件事,第 1 部分

使用 JConsole 和 VisualVM 进行 Java 性能分析

Ted Neward, 总裁, Neward & Associates

 

简介: 责怪糟糕的代码(或不良代码对象)并不能帮助您发现瓶颈,提高 Java™ 应用程序速度,猜测也不能帮您解决。Ted Neward 引导您关注 Java 性能监控工具,从 5 个技巧开始,使用 Java 5 的内置分析器 JConsole 收集和分析性能数据。

<!-- <p class="ibm-no-print"> <div id="dw-tag-this" class="ibm-no-print"></div> <div id="interestShow" class="ibm-no-print"></div> </p> -->

 

发布日期: 2010 年 8 月 20 日
级别: 初级 其他语言版本: 英文
建议: 0 (添加评论) <!-- Rating_Area_Begin --><!-- Ensure that div id is based on input id and ends with -widget -->

1 star2 stars3 stars4 stars5 stars 平均分 (共 4 个评分 )
<script type="text/javascript"></script><!-- Rating_Area_End -->

 

<!-- dW_Summary_Area_END --><!-- CONTENT_BODY -->

<!-- MAIN_COLUMN_BEGIN -->
<!-- Related_Searches_Area_And_Overlays_Begin --><!-- Related_Searches_Area_Begin --> <script type="text/javascript"></script>
<!-- START : HTML FOR ARTICLE SEARCH --> <!-- END : HTML FOR ARTICLE SEARCH --><!-- START : HTML FOR CODE SEARCH --> <!-- END : HTML FOR CODE SEARCH -->
<!-- Related_Searches_Area_End --><!-- MAIN_COLUMN_CONTAINER_BEGIN -->
<!-- MAIN_COLUMN_CONTENT_BEGIN -->

关于本系列

您觉得自己懂 Java 编程?事实是,大多数开发人员都只领会到了 Java 平台的皮毛,所学也只够应付工作。在本 系列 中,Ted Neward 深度挖掘 Java 平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程困难。

当应用程序性能受到损害时,大多数开发人员都惊慌失措,这在情理之中。跟踪 Java 应用程序瓶颈来源一直以来都是很麻烦的,因为 Java 虚拟机有黑盒效应,而且 Java 平台分析工具一贯就有缺陷。

然而,随着 Java 5 中 JConsole 的引入,一切都发生了改变。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。它不是完美的,但是当尖头老板来问你关于性能的问题时,用它来应对还是绰绰有余的 — 这比查询 Papa Google 要好得多。

在本期 5 件事 系列中,我将向您展示 5 个方法,使您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。

1. JDK 附带分析器

许多开发人员没有意识到从 Java 5 开始 JDK 中包含了一个分析器。JConsole(或者 Java 平台最新版本,VisualVM)是一个内置分析器,它同 Java 编译器一样容易启动。如果是从命令行启动,使 JDK 在 PATH 上,运行 jconsole 即可。如果从 GUI shell 启动,找到 JDK 安装路径,打开 bin 文件夹,双击 jconsole

当分析工具弹出时(取决于正在运行的 Java 版本以及正在运行的 Java 程序数量),可能会出现一个对话框,要求输入一个进程的 URL 来连接,也可能列出许多不同的本地 Java 进程(有时包含 JConsole 进程本身)来连接。

JConsole 或 VisualVM?

JConsole 从 Java 5 开始就随着 Java 平台版本一起发布,而 VisualVM 是在 NetBeans 基础上升级的一个分析器,在 Java 6 的更新版 12 中第一次发布。多数商店还没有更新到 Java 6 ,因此这篇文章主要介绍 JConsole 。然而,多数技巧和这两个分析器都有关。(注意:除了包含在 Java 6 中之外,VisualVM 还有一个独立版下载。下载 VisualVM,参见 参考资料。)

使用 JConsole 进行工作

在 Java 5 中,Java 进程并不是被设置为默认分析的,而是通过一个命令行参数 — -Dcom.sun.management.jmxremote — 在启动时告诉 Java 5 VM 打开连接,以便分析器可以找到它们;当进程被 JConsole 捡起时,您只能双击它开始分析。

分析器有自己的开销,因此最好的办法就是花点时间来弄清是什么开销。发现 JConsole 开销最简单的办法是,首先独自运行一个应用程序,然后在分析器下运行,并测量差异。(应用程序不能太大或者太小;我最喜欢使用 JDK 附带的 SwingSet2 样本。)因此,我使用 -verbose:gc 尝试运行 SwingSet2 来查看垃圾收集清理,然后运行同一个应用程序并将 JConsole 分析器连接到它。当 JConsole 连接好了之后,一个稳定的 GC 清理流出现,否则不会出现。这就是分析器的性能开销。


2. 远程连接进程

因为 Web 应用程序分析工具假设通过一个套接字进行连通性分析,您只需要进行少许配置来设置 JConsole(或者是基于 JVMTI 的分析器,就这点而言),监控/分析远程运行的应用程序。

如果 Tomcat 运行在一个名为 “webserve” 的机器上,且 JVM 已经启动了 JMX 并监听端口 9004,从 JConsole(或者任何 JMX 客户端)连接它需要一个 JMX URL “service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi”。

基本上,要分析一个运行在远程数据中心的应用程序服务器,您所需要的仅仅是一个 JMX URL。更多关于使用 JMX 和 JConsole 远程监控和管理的信息,参见 参考资料。)


3. 跟踪统计

不要成为典型

发现应用程序代码中性能问题的常用响应多种多样,但也是可预测的。早期的 Java 编程人员对旧的 IDE 可能十分生气,并开始进行代码库中主要部分的代码复查,在源代码中寻找熟悉的 “红色标志”,像异步块、对象配额等等。随着编程经验的增加,开发人员可能会仔细研究 JVM 支持的 -X 标志,寻找优化垃圾收集器的方法。当然,对于新手,直接去 Google 查询,希望有其他人发现了 JVM 的神奇的 “make it go fast” 转换,避免重写代码。

从本质上来说,这些方法没什么错,但都是有风险的。对于一个性能问题最有效的响应就是使用一个分析器 — 现在它们内置在 Java 平台 ,我们确实没有理由不这样做!

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

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

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

使用统计数据

假设一个 Tomcat 进程死于 OutOfMemoryError。如果您想要弄清楚发生了什么,打开 JConsole,单击 Classes 选项卡,过一段时间查看一次类计数。如果数量稳定上升,您可以假设应用程序服务器或者您的代码某个地方有一个 ClassLoader 漏洞,不久之后将耗尽 PermGen 空间。如果需要更进一步的确认问题,请看 Memory 选项卡。


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

生产环境中一切都在快速地进行着,您可能没有时间花费在您的应用程序分析器上,相反地,您可以为 Java 环境中的每个事件照一个快照保存下来过后再看。在 JConsole 中您也可以这样做,在 VisualVM 中甚至会做得更好。

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

稍后,您可以使用各种不同的商业分析器来分析文件,或者使用 VisualVM 分析快照。(记住,VisualVM 是在 Java 6 中可用的,且是单独下载的。)


5. JConsole 并不是高深莫测的

作为一个分析器实用工具,JConsole 是极好的,但是还有更好的工具。一些分析插件附带分析器或者灵巧的用户界面,默认情况下比 JConsole 跟踪更多的数据。

JConsole 真正吸引人的是整个程序是用 “普通旧式 Java ” 编写的,这意味着任何 Java 开发人员都可以编写这样一个实用工具。事实上,JDK 其中甚至包括如何通过创建一个插件来定制 JConsole 的示例(参见 参考资料)。建立在 NetBeans 顶部的 VisualVM 进一步延伸了插件概念。

如果 JConsole(或者 VisualVM,或者其他任何工具)不符合您的需求,或者不能跟踪您想要跟踪的,或者不能按照您的方式跟踪,您可以编写属于自己的工具。如果您觉得 Java 代码很麻烦,Groovy 或 JRuby 或很多其他 JVM 语言都可以帮助您更快完成。

您真正需要的是一个快速而粗糙(quick-and-dirty)的由 JVM 连接的命令行工具,可以以您想要的方式确切地跟踪您感兴趣的数据。


结束语

Java 性能监控不止于 JConsole 或 VisualVM — 在 JDK 中隐藏着一整套工具,只是大多数开发人员并不知道。 本系列 中的下一篇文章将深入探究一些实验性的命令行工具,可以帮助您挖掘更多的您所需要的性能数据。因为这些工具通常只关注特殊数据,比一个完整的分析器更小更轻巧,所以它们的性能开销要小一些。

<!-- CMA ID: 512445 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl -->

参考资料

学习

  • 您不知道的 5 件事 ”:在本系列中发现关于 Java 平台您不知道的事情,本系列致力于将 Java 技术琐事变成有用的编程技巧。

  • 使用 JMX 监控和管理” (Sun Microsystems):学习更多关于使用 JMX 和 JVM 内置的测量工具来监控和管理 Java 应用程序性能的信息。

  • Mustang JConsole”(Mandy Chung,Java.net,2008 年 5 月):简单介绍如何使用 JConsole Plugin API 构建自定义插件。

  • Acquiring JVM Runtime Information”(Dustin Marx,Dustin's Software Development Cogitations and Speculations,2009 年 6 月):演示了 JDK 内置的检测和管理工具,包括 JConsole 和 VisualVM。

  • 构建自己的分析器” (Andrew Wilcox,developerWork,2006 年 3 月):作者向您介绍了他如何用 Java 5 中的代理接口和 SOA 构建自定义的分析器。

  • IBM Monitoring and Diagnostic Tools for Java:Health Center 是一款监控正在运行的 IBM Java 虚拟机的低开销分析工具。

  • developerWorks Java 技术专区:这里有数百篇关于 Java 编程各个方面的文章。

获得产品和技术

  • VisualVM 是一个整合命令行 JDK 工具和轻量级分析功能的可视工具。

讨论

关于作者

Ted Neward 是 Neward & Associates 的总裁,从事关于 Java、.NET、XML Services 以及其他平台方面的咨询、指导和演示等工作。他居住在华盛顿西雅图。

<!-- MAIN_COLUMN_CONTENT_END --><!-- INLINE_COMMENTS_START -->

建议

分享到:
评论

相关推荐

    【转帖】 使用 JProfiler 监控 JBoss 运行情况

    JProfiler是一款功能强大的Java性能分析工具,它可以对Java应用程序、Applets、Java Web Start应用以及应用服务器进行性能监控与分析。通过深入地分析内存使用、线程活动、垃圾回收等关键性能指标,帮助开发人员及...

    转帖经典---JAVA设计模式

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。这些模式为程序员提供了一种标准化的方式,以便在面向对象编程中有效地组织和构建代码,提高代码的可读性、可维护性和...

    转帖性能测试.pdf

    并发性能测试的过程是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统的瓶颈或者不能接收的性能点,通过综合分析交易执行指标和资源监控指标来确定系统并发性能的过程。 负载测试是确定在各种工作负载下...

    论坛转帖工具.rar

    标题中的“论坛转帖工具.rar”表明这是一个用于在论坛之间转移帖子的软件工具,通常用于帮助用户方便地将一个论坛的帖子内容复制到另一个论坛,可能是为了分享信息、讨论或保存重要的帖子。这类工具可能包括自动抓取...

    UBB论坛转帖圣手.exe

    UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe

    【转帖】想跟黑客叫板,就不能不知道这些东西

    数据包监测(Packet Sniffing)是一种网络监控技术,通过捕获网络中传输的数据包,分析其中的信息,用于网络故障排查、性能监控或安全审计。然而,恶意的数据包监测也可能被黑客用于窃取敏感信息,如用户名、密码或...

    编辑人员转帖去水印工具

    水印可能是他人版权的标识,也可能是不希望展示的信息,去除水印成为了一项必要的技能。本篇文章将详细探讨“编辑人员转帖去水印工具”,并介绍如何使用名为Teorex Inpaint的1.0.0.2版本的软件来实现这一目标。 ...

    [转帖]世界编程大赛第一名写的程序

    标题和描述中的“世界编程大赛第一名写的程序”这一知识点,实际上指向了计算机科学与编程竞赛领域的一个重要概念:即在高水平的编程比赛中,优胜者所编写的代码往往蕴含着高级算法、数据结构以及编程技巧。...

    discuz X2转帖工具、采集工具

    3. 性能影响:大量并发的发帖或转帖可能对论坛服务器造成压力,需合理控制频率,以免影响用户体验。 四、安全性与兼容性 1. 安全检测:在下载和使用此类工具时,需确保来源可靠,避免安装携带恶意软件的版本,保护...

    转帖工具插件 for PHPwind 7.5 正式版.rar

    7. **安全与性能**:在使用任何第三方插件时,都应注意其可能带来的安全风险。虽然这个插件声称无需修改核心文件,但用户仍需关注插件的安全性,避免引入潜在的漏洞。 8. **故障排查**:如果在使用过程中遇到问题,...

    J2ME全方位开发讲解基础汇总[转帖]

    现在有大部分人,都是从零开始学J2ME的,学习J2ME的时候,总是从Java基础开始学习,而且现在讲Java基础的书籍中都是以J2SE来讲基础,这就给学习造成了一些不必要的麻烦,下面将J2ME中用到的和不需要的Java基础知识做...

    1分钟内抓到WPA握手包的方法!转帖的!!!

    WPA 握手包捕获方法 在WiFi网络安全测试中,捕获...在使用这个方法前,需要确保您的无线网卡支持监控模式,并且需要使用 aircrack-ng 工具包。这个方法可以在短时间内捕获 WPA 握手包,对 WiFi 网络安全测试非常有用。

    H42131-转帖《关于用净值计算法计算收益》.doc

    H42131-转帖《关于用净值计算法计算收益》.doc

    转帖工具ConvertX fordiscuz7.1/7.2 修改增强版.rar

    1.修改自Convert X转帖工具 2.新增批量替换关键词(原来是单个词语替换,可以利用这个功能删除一些网站的防转帖代码) 3.批量随机新增文字(新增内容可自定义,从而实现伪原创) 4.cookie记录替换和新增关键词(避免每次...

    贴吧转帖工具

    【贴吧转帖工具】是一种专为百度贴吧用户设计的便捷工具,主要用于提高用户在贴吧中的互动效率。通过这款工具,用户可以实现一键转帖和一键8经验签到的功能,极大地简化了传统操作流程,节省了用户的时间,提升了...

    关于工作与生活的转帖

    1. **初赛阶段**:即职业生涯的早期,通常是20-30岁之间。在这个阶段,大多数人处于职场的底层,面对较小的生活压力,健康状况较好。此时,通过努力工作和个人能力的展现,很容易在同龄人中脱颖而出。很多人在这个...

    注册表监控程序 (Hook API) VC 6.0

    注册表监控程序 该程序的作用是记录系统发生的注册表操作,(只记录成功的,忽略失败的) 请使用VC6.0编译,另外需要安装较新的Platform SDK,比如Microsoft Platform SDK for Windows 2003 或 Microsoft Platform...

    gl8雨刮维修以及调试转帖.doc

    该系统由四个主要部分组成:雨刮电机总成、前雨刮连动杆定位调节器、雨刷联动杆总成和雨刷臂。下面将详细阐述各部分的功能和常见故障分析。 1. **雨刮电机总成**:电机负责提供动力,驱动雨刮的运动。它包含齿轮...

    用PHP批量生成图片缩略图——活跃论坛转帖

    5. `开发文档.txt`:提供了关于如何使用这些脚本的说明,可能包含了使用方法、参数解释和示例代码。 在实际操作中,批量生成图片缩略图的步骤通常如下: 1. 检查上传的图片或指定的目录。 2. 对每个图片文件读取并...

    Html2UBBMaxcj_Softii论坛专用转帖工具

    - **本站站内插件安装方法.txt**:这个文件可能提供了关于如何在Softii论坛上安装和使用此工具的详细步骤。 - **人人软件站.url**:这可能是一个快捷方式,指向一个网站,用户可以通过这个链接获取更多的软件信息...

Global site tag (gtag.js) - Google Analytics