<!-- Related_Searches_Area_And_Overlays_Begin --><!-- Related_Searches_Area_Begin --> <script type="text/javascript"></script>
<!-- MAIN_COLUMN_CONTENT_BEGIN -->
当应用程序性能受到损害时,大多数开发人员都惊慌失措,这在情理之中。跟踪 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 进行工作
在 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. 跟踪统计
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 -->
参考资料
学习
获得产品和技术
讨论
关于作者
Ted Neward 是 Neward & Associates 的总裁,从事关于 Java、.NET、XML Services 以及其他平台方面的咨询、指导和演示等工作。他居住在华盛顿西雅图。
<!-- MAIN_COLUMN_CONTENT_END --><!-- INLINE_COMMENTS_START -->
建议
相关推荐
JProfiler是一款功能强大的Java性能分析工具,它可以对Java应用程序、Applets、Java Web Start应用以及应用服务器进行性能监控与分析。通过深入地分析内存使用、线程活动、垃圾回收等关键性能指标,帮助开发人员及...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。这些模式为程序员提供了一种标准化的方式,以便在面向对象编程中有效地组织和构建代码,提高代码的可读性、可维护性和...
并发性能测试的过程是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统的瓶颈或者不能接收的性能点,通过综合分析交易执行指标和资源监控指标来确定系统并发性能的过程。 负载测试是确定在各种工作负载下...
标题中的“论坛转帖工具.rar”表明这是一个用于在论坛之间转移帖子的软件工具,通常用于帮助用户方便地将一个论坛的帖子内容复制到另一个论坛,可能是为了分享信息、讨论或保存重要的帖子。这类工具可能包括自动抓取...
UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe
数据包监测(Packet Sniffing)是一种网络监控技术,通过捕获网络中传输的数据包,分析其中的信息,用于网络故障排查、性能监控或安全审计。然而,恶意的数据包监测也可能被黑客用于窃取敏感信息,如用户名、密码或...
水印可能是他人版权的标识,也可能是不希望展示的信息,去除水印成为了一项必要的技能。本篇文章将详细探讨“编辑人员转帖去水印工具”,并介绍如何使用名为Teorex Inpaint的1.0.0.2版本的软件来实现这一目标。 ...
标题和描述中的“世界编程大赛第一名写的程序”这一知识点,实际上指向了计算机科学与编程竞赛领域的一个重要概念:即在高水平的编程比赛中,优胜者所编写的代码往往蕴含着高级算法、数据结构以及编程技巧。...
【贴吧转帖工具】是一种专为百度贴吧用户设计的便捷工具,主要用于提高用户在贴吧中的互动效率。通过这款工具,用户可以实现一键转帖和一键8经验签到的功能,极大地简化了传统操作流程,节省了用户的时间,提升了...
3. 性能影响:大量并发的发帖或转帖可能对论坛服务器造成压力,需合理控制频率,以免影响用户体验。 四、安全性与兼容性 1. 安全检测:在下载和使用此类工具时,需确保来源可靠,避免安装携带恶意软件的版本,保护...
7. **安全与性能**:在使用任何第三方插件时,都应注意其可能带来的安全风险。虽然这个插件声称无需修改核心文件,但用户仍需关注插件的安全性,避免引入潜在的漏洞。 8. **故障排查**:如果在使用过程中遇到问题,...
现在有大部分人,都是从零开始学J2ME的,学习J2ME的时候,总是从Java基础开始学习,而且现在讲Java基础的书籍中都是以J2SE来讲基础,这就给学习造成了一些不必要的麻烦,下面将J2ME中用到的和不需要的Java基础知识做...
WPA 握手包捕获方法 在WiFi网络安全测试中,捕获...在使用这个方法前,需要确保您的无线网卡支持监控模式,并且需要使用 aircrack-ng 工具包。这个方法可以在短时间内捕获 WPA 握手包,对 WiFi 网络安全测试非常有用。
H42131-转帖《关于用净值计算法计算收益》.doc
1.修改自Convert X转帖工具 2.新增批量替换关键词(原来是单个词语替换,可以利用这个功能删除一些网站的防转帖代码) 3.批量随机新增文字(新增内容可自定义,从而实现伪原创) 4.cookie记录替换和新增关键词(避免每次...
1. **初赛阶段**:即职业生涯的早期,通常是20-30岁之间。在这个阶段,大多数人处于职场的底层,面对较小的生活压力,健康状况较好。此时,通过努力工作和个人能力的展现,很容易在同龄人中脱颖而出。很多人在这个...
注册表监控程序 该程序的作用是记录系统发生的注册表操作,(只记录成功的,忽略失败的) 请使用VC6.0编译,另外需要安装较新的Platform SDK,比如Microsoft Platform SDK for Windows 2003 或 Microsoft Platform...
该系统由四个主要部分组成:雨刮电机总成、前雨刮连动杆定位调节器、雨刷联动杆总成和雨刷臂。下面将详细阐述各部分的功能和常见故障分析。 1. **雨刮电机总成**:电机负责提供动力,驱动雨刮的运动。它包含齿轮...
5. `开发文档.txt`:提供了关于如何使用这些脚本的说明,可能包含了使用方法、参数解释和示例代码。 在实际操作中,批量生成图片缩略图的步骤通常如下: 1. 检查上传的图片或指定的目录。 2. 对每个图片文件读取并...
- **本站站内插件安装方法.txt**:这个文件可能提供了关于如何在Softii论坛上安装和使用此工具的详细步骤。 - **人人软件站.url**:这可能是一个快捷方式,指向一个网站,用户可以通过这个链接获取更多的软件信息...