北京神州飛黃科技发展有限公司
TEL400.888.1600FAX86.10.82713862 BJSZFH.COM
北京市_朝阳区东三环三元桥佳程廣場A座11层
CASE SHARE
HP-UX中的Java应用性能调优概述(上)26.JAN.2009
HP-UX中的Java应用性能调优简介
本指南旨在为读者提供一系列有用的方法来排除与Java相关的性能问题,并帮助在HP-UX系统中进行Java应用的性能调优。
本文并没有详细地讨论这一课题,只是为该领域的工作进行了概述。参考资料部分提到了几本关于Java性能调优相关的书籍和参考文章,可以参阅它们来了解更多详细信息。本文的内容与包含HotSpot Runtime编译器版本1.3.1的Java Software Developer Kit(SDK)1.3.1及以后版本保持一致。
文中讨论的许多主题,在下面的网站有更加详细的分析
www.hp/dspp(搜索“Java Performance Tuning on HP-UX”)
或直接访问
aix系统netstat命令详解h21007.www2.hp/dspp/tech/tech_TechDocumentDetailPage_IDX/1,,1602!0!,00.html
在许多报告有性能问题的情况中,对垃圾回收行为的调查表明JVM运行的heap配置存在问题。在其它情况中,也可能是应用的线程锁定或内存溢出引起了该问题。我们建议初学者采用以下方法的结合来解决JAVA应用性能的问题:
•使用Glance/gpm工具来出瓶颈所在;
•分析–Xverbosegc(来自垃圾回收器的详细报告)JVM选项的输出结果;
•使用Hpjmeter工具分析–Xeprof(扩展的简档描述)JVM选项的输出结果;
•浏览kill –3 <pid>命令的几个输出结果
它们将提供有用的数据,可以帮助您对碰到的问题进行彻底的初始分析。本文将会对这些领域进行深入的分析。以上所述四种方法,以及对硬件设置、操作系统和JVM版本及选项的详细描述,是性能工程师着手解决问题时最初的一些步骤。
Glance/gpm是一个HP的工具,在HP-UX Application Software光盘的软件包中。它也可以用于其它操作系统,例如Solaris和AIX。其它工具,如“top”、“vmstat”、“netstat”和“sar”也提供了类似的性能信息。这些均被记录在Sauers和Weygant [Sauers]所著的《HP-UX性能调优》一书中。鉴于本文的目的,我们将侧重于介绍使用Glance/gpm进行系统和进程层的监视。
Java性能分析中存在许多的不确定因素。HP-UX内核参数、在运行时指定的JVM选项以及应用设计等所有一切都会带来相应的影响。正是由于该原因,所以在分析性能问题时应采取从上至下系统化的方法(从最外层的系统角度)并在首次分析时考虑所有的可能性,这一点非常重要。采取从上至下的方法,我们首先将系统作为一个整体来考虑(将一台或多台协作的计算机作为一个集合,它们互相之间具有网络影响,可能在某些点还存在数据库访问影响)。
在考虑了整个系统中所有的可变因素之后,我们将分析范围缩小到单个计算机,再进一步缩小到该计算机中的单个进程,从而出问题的根本原因。之所以采用从上之下的分析方法,是因为导致性能问题的原因可能存在于程序、计算机、数据源和网络等构成整个系统的各个部分。有多种工具可以帮助我们逐一分析每台计算机,HP-UX Glance/gpm便是其中最强大的工具之一,本文后面的部分会再次提到该工具。
过去,研发实验室进行的分析工作发现性能瓶颈的原因也可能源于非Java的技术。性能工程师必须时刻考虑到这一点。
系统中各台计算机之间以及计算机与其外部数据源之间的数据交换也必须进行检查。这项工作可以通过使用“netstat”等网络与数据库监视工具来完成。
推荐流程中的步骤包括:
•评估整体的系统配置、吞吐量和负载情况;
•测量性能(使用我们将进一步详细介绍的工具);
•分析来自性能测量工具的数据;
•确定一个或多个可能的瓶颈;
•每次仅更改或调节一个项目;
•再次测量性能以检查该调节步骤所带来的变化。
在本文以后的章节我们将会更加详细地分析这些步骤。在分析过程中考虑来自多个工具的数据并反复核对其输出结果也非常重要。例如,Glance/gpm生成的线程信息应该与将“kill –3 <pid>”命令应用于JVM进程时所看到的线程数据一致。
较高的吞吐量水平并非总是性能问题的原因所在。许多生产系统在运行时都一直保持高容量的交易流。性能工程师所要面对的真正问题是“进程中的瓶颈在哪里,并且它们如何被触发?”
为了出这些瓶颈,有时候需要为系统添加负载,再现峰值用户处理水平时的负载,这时候系统将非常繁忙。有多种工具可以在基于Web的应用上实现这种高负载,它们将在本文最后的工具章节中介绍。
不经过分析和测量便对问题原因作出最初的猜测非常具有诱惑力,特别是在项目小组承受着压力要解决一个问题时。这种情况应该避免。通常情况下,我们所作的猜测会造成误导。
相反,我们建议先使用各种工具(Glance/gpm、Hpjmeter、Hpjtune、sar、–Xverbosegc和–Xeprof的JVM
选项等等)来收集性能数据,在这些工具的数据经过分析并被了解之后,便可以就所见的症状给出原因了。该分析需要一定的时间,通常性能工程师进行性能调优的第一步是先搜集系统运行数据,而不是上来就修改系统参数。
准备一个修改记录非常重要,用于记录所作出的每一个变更,以及应用变更后所带来的性能影响。性能工程师非常容易对系统一次进行多个变更,这种情况应该避免。因为多个变更、多种结果以及许多的外部影响因素很容易给工程师造成混乱,所以应该以书面的形式将所应用的变更记录下来。
计算机编程中的一个常用故障排除技巧是将问题尽可能分解到能够反映症状的最小代码块。但是这种方法在性能分析中却非常危险,因为较小样本的行为通常与实际生产系统有很大差别。
建议尽可能在“真实的”系统上进行性能分析,而不是采用大型系统的子集。这可能会占用测试的时间,但是所获得结果的将会更加准确。
在分析一个系统时,测量工具本身确实也会对性能产生影响。例如Glance/gpm便是HP-UX系统中的一个进程,它会占用该机器的一部分CPU资源。我们所使用的工具已经尽可能使这种影响将到最低。但我们在使用一个测量工具时,这种影响总是存在的。
当前许多基于web的体系结构可能采用一组计算机作为web服务器层,另一组计算机作为应用服务器层以及一个数据库层。所有这些都通过网络连在一起,并互相作用以响应每一个客户请求(例如通过浏览器发出的请求)。
进行整体系统评估的主要工具有Glance/gpm(图形进程监视)以及类似的工具(如HP PerfView),它能够显示单个计算机中操作系统和进程的状态。Glance/gpm将就计算机不同组件的状态为工程师提供一个可视、直观的评估,例如其CPU负载、输入输出负载、网络流量,以及内存消耗率等。
在每台HP-UX计算机上使用Glance/gpm工具使工程师能够清楚地看到参与整个系统的所有机器中哪些
负载紧张,哪些比较空闲。下图显示了Glance/gpm窗口中最顶层的计算机视图,我们可以看到该计算机的“系统时间”消耗水平非常高,而被使用的“用户时间”水平非常低。这表明该计算机存在问题。实际上我们希望有更高的CPU消耗被用于“用户时间”(用于执行应用的时间),而不是“系统时间”(用于执行操作系统功能的CPU 时间)。
机器中出现这种非常高的“系统时间”占用率可能是由于操作系统调用,它们负责锁定被称为“mutexes”的数据结构,占用很长的系统时间来解决争夺,或者等待访问这些结构的线程被强制进入休眠状态。因此以下的情
况可能是Java程序中的线程锁争夺所引起的,该话题将在本文以后的部分深入讨论。
到目前为止,我们已经知道太多的时间被用于执行系统代码,而不是应用代码。下一步是检查机器中的哪一个特定进程造成了这种情况。
图1:HP-UX中Glance/gpm工具的主窗口
从整体系统视图缩小至单个计算机,再进一步缩小至特定的进程是使用Glance/gpm工具以及其它HP-UX性能分析工具的一个练习。它们将在参考1[Sauers]中详细描述。
数据收集
性能分析的第一个步骤是记下用户交易执行路径中每一台计算机的机器设置(从而出怀疑对象)。我们需要的信息包括:
•计算机中CPU的数量以及这些CPU的速度(CPU的数量可以中Glance/gpm中看到)
•物理内存的大小(也可以在Glance/gpm中看到)
•磁盘空间的大小(已占用和可用的容量,在“df”命令的输出结果中)
•操作系统可调节参数的值(使用Hpjconfig工具可以看到)
•需要的操作系统补丁(Hpjconfig也能提供帮助)
•使用的JVM版本(使用“java –version”命令可以到)
•使用的JVM选项(如–Xms<value>、-Xmx<value>或其它)。
以下表1中是“java –version”命令所输出的Java版本信息的举例。
Java version "1.3.1.00-release"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1.00-release-010607-16:53-PA_RISC1.1) Java HotSpot(TM) Server VM (build 1.3.1 1.3.1.00-release-010607-19:35-PA_RISC2.0 PA2.0, mixed mode)
表1. “Java –version”命令输出的Java运行时版本信息
以上的每一个值均能帮助性能工程师测量机器中Java程序的性能特征。只需简单地升级至最新的Java SDK版本,升级操作系统并应用最新的补丁,或者使用Java运行时的正确选项,便能够解决一部分性能问题了。
建议性能工程师先升级至最新的Java SDK版本和最新的补丁,以证明这样是否能够改善系统的状况。下一章(“hp-ux内核参数”)中描述的Hpjconfig工具也能够检查是否已经应用了正确的HP-UX补丁。
表2显示了Java虚拟机的一种误用情况。该实例显示了用户使用了较旧、未经优化的Java运行版本(“classic JVM”),它不适合用于服务器端长期运行的应用。建议在这种情况下使用默认的Java运行(“HotSpot JVM”)。$ java –classic ClassName
表2. 使用较旧、低效的Java运行时版本 — 这种情况应该避免。
对操作系统进行正确的设置,使其以最优的方式来运行Java程序极其重要。几个HP-UX可调参数会影响
这一正确的设置。
用于确定这些可调参数最佳值的工具是Hpjconfig,它本身也是一个Java程序。Hpjconfig是一个免费的程序,可以从以下网址下载www.hp/products1/unix/java/java2/hpjconfig/index.html。
表3显示了Hpjconfig的调用。
$ java –cp HPjconfig.jar:HPjconfig_data.jar HPjconfig
表3. 使用Hpjconfig工具
该工具首先检查运行其的计算机的型号,然后允许性能工程师来选择各种不同的应用类型,例如“应用服务器”、“Web服务器”和“WAP服务器”等。随后它将就某些HP-UX内核可调参数应该采用的值提出合理的建议。它还能够将输出结果数据保存在一个文件中。然后系统管理员便可以使用SAM系统管理工具将这些推荐的值应用到操作系统中。图2显示了Hpjconfig的初始界面。此时,工具正在检查应用到当前HP-UX系统中的补丁是否适合于Java。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论