`
thomas0988
  • 浏览: 473587 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

Java性能监控小技巧(转)

阅读更多

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

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

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

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

1.JDK附带分析器

许多开发人员没有意识到从Java 5开始JDK中包含了一个分析器。JConsole(或者Java平台最新版本,VisualVM)是一个内置分析器,它同Java编译器一样容易启动。如果是从命令行启动,使JDK在PATH上,运行jconsole即可。如果从GUIshell启动,找到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清理流出现,否则不会出现。这就是分析器的性能开销。

JConsole或VisualVM?

JConsole从Java 5开始就随着Java平台版本一起发布,而VisualVM是在NetBeans基础上升级的一个分析器,在Java 6的更新版12中第一次发布。多数还没有更新到Java 6,因此这篇文章主要介绍JConsole。然而,多数技巧和这两个分析器都有关。

 

2.远程连接进程

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

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

基本上,要分析一个运行在远程数据中心的应用程序服务器,您所需要的仅仅是一个JMX URL。

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选项卡。

不要成为典型

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

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

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中隐藏着一整套工具,只是大多数开发人员并不知道。

关于作者


Ted Neward

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

 -
 


文章转载自网管之家:http://www.bitscn.com/pdb/java/201008/190157_1.html

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java虚拟机

    第4章 虚拟机性能监控与故障处理工具 4.1 概述 4.2 JDK的命令行工具 4.2.1 jps:虚拟机进程状况工具 4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java配置信息工具 4.2.4 jmap:Java内存映像工具 ...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    3.3 Memcached的管理与性能监控 3.3.1 如何管理Memcached 3.3.2 Memcached的监控 3.3.3 Memcached变种产品介绍 3.4 通过UDFs实现Memcached与MySQL的自动更新 3.4.1 UDFs使用简介 3.4.2 memcached_...

    ORACLE9i_优化设计与系统调整

    §12.4 SQL语句优化技巧 144 §12.4.1 对所有SQL语句执行EXPLAIN_PLAN 145 §12.4.2 磁盘读和缓冲区获取 146 §12.4.3 判定式崩溃 146 §12.5 使用EXISTS和IN 148 §12.6 分离事务(Discrete Transactions ) 149 §...

    Oracle数据库管理员技术指南

    2.1.16 行链接/行迁移的技巧 2.1.17 怎样定义表的大小 2.1.18 怎样确定 PCTFREE 的最佳值 2.1.19 怎样决定 PCTUSED 的最佳值 2.1.20 怎样查找每个数据块的可用数据 区域 2.2 管理程序对象 2.2.1 怎样检查无效...

    最新小程序学习自律养成小程序+ssm.zip

    该项目结合了微信小程序的便利性与普及性以及SSM框架的高效性能,致力于打造一个促进用户养成良好学习习惯和自律性的平台。 以下是该微信小程序学习自律养成系统的核心功能和特点: 1. **目标设定与跟踪**:用户...

    最新小程序健身管理系统及会员微信小程序的设计与实现+ssm.zip

    该项目结合了微信小程序的普及性和便捷性以及SSM框架的高性能处理能力,致力于打造一个功能全面、用户友好的健身管理平台。 以下是该微信小程序健身管理系统的核心功能和特点: 1. **会员注册与管理**:会员可以...

    软件框架设计的艺术

    18.10 语法小技巧 346 第19章 消亡的过程 348 19.1 明确版本的重要性 349 19.2 模块依赖的重要性 349 19.3 被移除的部分需要永久保留吗 352 19.4 分解庞大的API 352 第20章 未来 356 20.1 ...

    MongoDB权威指南(中文版)高清

    通过本书的权威解读,你会了解面向文档数据库的诸多优点,会发现MongoDB如此稳定、性能优越甚至能够无限水平扩展背后的原因。本书的两位作者均来自开发并支持开源数据库MongoDB的公司10gen。数据库开发人员可将此书...

    VC与Labview、Matlab编程论文资料[2].rar

    这是VC与Labview、Matlab编程论文资料,全部为pdf格式,讲述有VC编程技巧、也有VC与Labview混合编程, VC与matlab混合编程,有365个,约500M,分成4个【独立】压缩包,如果想要全部的论文则需要下载全部压 缩包,...

    VC与Labview、Matlab编程论文资料

    这是VC与Labview、Matlab编程论文资料,全部为pdf格式,讲述有VC编程技巧、也有VC与Labview混合编程, VC与matlab混合编程,有365个,约500M,分成4个【独立】压缩包,如果想要全部的论文则需要下载全部压 缩包,...

    VC与Labview、Matlab编程论文资料[4].rar

    这是VC与Labview、Matlab编程论文资料,全部为pdf格式,讲述有VC编程技巧、也有VC与Labview混合编程, VC与matlab混合编程,有365个,约500M,分成4个【独立】压缩包,如果想要全部的论文则需要下载全部压 缩包,...

    Toad 使用快速入门

    从网络到性能优化,从备份恢复到Error message,一应俱全 例子:遇到失效的存储过程怎么办? 4. 如何对存储过程进行Debug?  需要Toad单独的Debug Option(Standard Version 没有这个选项)  要用Toad对存储...

    华为编程开发规范与案例

    在新的编程思想中,指针基本上被禁止使用(JAVA中就是这样),至少也是被限制使用。而在我们交换机的程序中大量使用指针,并且有增无减。 2、防止指针/数组操作越界 【案例1.2.1】 在香港项目测试中,发现ISDN话机...

Global site tag (gtag.js) - Google Analytics