版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
官方JRockitJVM调优文档转自BEA,原文链接已经无法访问,文中的许多链接也更改过地址,我把能找到的都重新做了连接。以前一直以为Jrockit和Sun的JVM配置差不多,看了这篇文章和最后参考资料中的信息,发现区别不是一点点,很多常用参数的使用都不一样。Jrockit的自动化设置应该说做的不错,在WebLogic上我很少更改它的默认配置(除了堆最大最小值),不过不影响这篇文章存在的价值。摘要本文的目的是以清单的方式提供BEAJRockitJVM的调优信息。从深奥的命令行选项到迭代性能测试,本文涵盖了许多方面。大部分数据都是我与用户合作过程中收集的。您要是也有什么技巧的话,请告诉我,在本文的下一版中,我会尝试将它们添加进去。具体的产品版本信息都已在适当的地方列出;但是,本文所提供的通用指南适用于JRockit的大多数版本。每个版本的JRockit都增加了新的设置和优化,所以请查看\o"Jrockit发行说明"发行说明和\o"JRockit产品中心"JRockit产品中心。验证当前的JRockit环境首先需要确定您的运行时应用程序服务器所使用的JRockit的版本。为此,可以查看相应应用程序服务器的日志文件。也可以使用适当的脚本设置系统环境,然后执行java–version命令来确定JRockit的版本。接着,收集当前JVM标志,开发和/或生产阶段需要用到它们:-server-Xms1024m-Xmx1536m-Xverboselog:gc.log-Xverbose:memory-Xgcprio:throughput这将告诉您当前JRockit实例的配置情况。确定应用程序的目标确定应用程序的目标是什么。是“响应快”还是“性能高”?根据目标的不同,需要设置不同的垃圾收集算法。例如,如果应用程序的目标是实现高性能,则确保设置了DynamicGarbageCollector"-Xgcprio:throughput"选项。如果目标是响应时间短,那么需要将-Xgcprio:pausetime-Xpausetarget=XXX’中的pausetarget设置为最佳值。有关更多细节,请查看JRockit调优文档。收集故障诊断数据如果JVM性能有问题,那么最好是先收集一些分析数据。该工作可以由团队中有相关经验的人员来完成,您也可以将这些信息发送给BEASupport做进一步分析。首先,出现问题时需要收集大约10分钟的运行时JRockitRecording(JRA)数据。可以使用jrcmd.sh实用工具或\o"JRMC"JRockitMissionControl(JRMC)完成此操作。请阅读“性能测试期间的JRCMD/JRA”和“JRockitMissionControl”两节的内容。有关详细信息,请参阅JRockitMissionControl文档。LatencyAnalysis一节提供许多有价值的内容,我们可以从中了解任何潜在的延迟问题(在JRockit中需要一个许可证就可以使用它)。然后,需要收集问题发生时的一些详细日志。方法是在启动服务器实例的时候在JVM命令行输入以下参数:-Xverboselog:perTestGC.log-Xverbose:opt,memory,gcpause,memdbg,compaction,gc,license-Xverbosetimestamp-Xgcreport这样会将有价值的分析数据收集到刚才配置的perTestGC.log文件中。团队成员和/或BEASupport可以对这些数据进行分析。最后一点:通常,应用程序不会请求执行垃圾收集(也就是在应用程序代码中调用System.gc())。但如果您怀疑它有问题,那么可以在启动服务器实例的时候,在Java命令行使用-XXnoSystemGC参数来禁用它。现在,我将介绍如何通过迭代性能测试方法解决这些问题。迭代性能测试方案及其方法完成初始数据的收集和分析后,我们可以通过迭代方法来调优JVM。此处介绍的测试方案是在JRockitJVM层执行迭代调优的通用方法,可以找到哪些设置可能有益于特定应用程序。假定您有测量性能结果的方法;然后,可以将它们与“基准”(您应该已经有了)进行比较。测试1:线程本地区域大小和大对象大小在本测试中,我们将查看线程本地区域大小。这很重要,因为如果这些标志的默认设置对于应用程序不是最佳的(多数情况下是这样),那么就会造成堆锁定,这将对性能产生影响。将大部分对象限制在一定范围内对整体性能有益。分析收集的JRARecording数据分析结果,查看-XXtlasize和-XXlargeobjectlimit是否需要调优(请记住,对于多数应用程序,根据eDocs,线程本地区域大小应该至少是大对象大小的两倍)。这些内c.测试4-3:根据前面的-XXsetGC:genparpar测试向上或向下调优nursery大小。d.测试4-4:用-Xgc:gencon-Xns50m(和设为收集规格的日志)试试。e.测试4-5:用-Xgc:parallel-XXcompactratio:1(和设为收集规格的日志)试试。测试5:调优垃圾收集线程本测试的目的是查看gcthreads标志设置对整体性能的影响。根据前面的结果,调优-XXgcthreads标志为实际物理CPU的数量并重新运行测试(由于这些值默认是基于机器上核心和硬件线程的数量,所以这应该是自动调优的)。您可以查看在“收集故障诊断数据”一节收集的详细输出日志来对其验证。更多细节请参见gcThreadsflag。测试6:调优锁争用如果在胖锁(fatlock)上存在锁争用,则可以用-XXdisableFatSpin禁止它们,或者用-Djrockit.useAdaptiveFatSpin=true让JRockit自适应地禁止它们。当测试2启用-Djrockit.lockprofiling时,可以通过在JRA中查看那个标签来确定这一点。更多细节,请参见lockinginJRockit。测试7:调优Xeon硬件如果运行在Xeon硬件之上,那么可以添加-XXallocPrefetch和-XXallocRedoPrefetch,它们与TLA和LargeObjectLimit一起将有助于减少内存分配的开销。有关详细信息,请参见allocPrefetch标志。为了得到最佳的结果,您可能会在BIOS中禁用硬件预取指令。虽然操作方式取决于BIOS的牌子,但参数的名称通常都为“HardwarePrefetcher”、“AdjacentSectorPrefetcher”、“AdjacentCacheLinePrefetcher”等。更多信息请参见Intelonthissubject。测试8:将堆放入largePage这会将堆锁入内存,使操作系统不能将其交换出来。更多信息请参见largePages标志,有关Linux操作系统端配置的更多信息还可以参考在Linux上配置-XXlargePages一节。在JRockitR27版中,该选项的名称为-XlargePages。根据前面的结果,调优-XlargePages标志可能有所帮助,但可能也没有。使用该标志运行测试,查看结果否对整体性能有帮助。测试9:用-XXaggressive标志测试本节中的这些配置将使JVM高速运行并尽快达到稳定状态。为了实现此目标,JVM在启动时需要更多内部资源;但当目标一旦达成,它所需要的自适应优化将更少。我们推荐您为了那些单独工作的、运行时间长的、内存敏感的应用程序使用这个选项。更多细节请参见aggressive标志。使用-XXaggressive标志运行测试,查看结果否对整体性能有帮助。测试10:用-XX:+UseNewHashFunction标志测试这个选项支持一个新的、更快的HashMap散列函数,它在Java5.0Update8中引入,从R27.1.0开始也是BEAJRockit的一部分。这个散列函数能够通过改进的散列扩展提高性能而不改变HashMap中元素存放的顺序。更多细节请参见UseNewHashFunction标志。使用这个新的-XX:+UseNewHashFunction运行测试,,查看结果否对整体性能有帮助。测试11:将暗物质减到最少“暗物质”指被浪费的堆内存,它使堆成为许多碎片。了解如何最大程序地减少暗物质,以便当堆需要压缩时,整体吞吐量不受影响。请看以下选项:使用分代的垃圾收集器(-Xgc:genconor-Xgc:genpar)。在初始收集(nursery垃圾收集)期间,在nursery中被发现生存的对象被迁移到旧的一代。这样有好的副作用,当迁移对象时可以压缩它们。提高压缩比(-XXcompactionRatio=nn)。通过将对象迁移到压缩块中、消除它们之间的暗物质,压缩减少了暗物质。通过-XXminBlockSize:<memSize>选项修改规范(将什么视为暗物质?)。堆上小于最小块大小的块视为暗物质。因此,通过减小最小块大小,您最终减少了暗物质。但请注意,因为JRockit为了释放堆空间必须做更细密的搜索,所以垃圾收集的时间会更长。最小块大小默认为2KB。进一步测试:调优应用程序服务器层最后,查看上述调优建议,调优WebLogicServer实例层。结束语本文提供的信息绝非一个完整的清单。但它会让您开始更好地理解和调优JRockitJVM层!参考资料JRockit调优文档JRocikit参考文档:XFlagsJRocikit参考文档:XXFlags附录以下内容为正文引用过的额外信息。性能测试期间的JRCMD/JRA使用命令行或者基于JRockitMissionControl(JRMC)Eclipse的工具都能够执行JRARecoding。我们可以使用JRMC连接到多个JRockitJVM,收集JRArecording,查看JVM的实时数据,检测和排除内存泄漏,以及查看应用程序内的潜伏物(执行缓慢“点”)。有关如何运行JRockitMissionControl,请参见下一节。下载文档许可证。将下载的license.bea文件添加到<JROCKIT_HOME>/jre目录中。这样,完整路径将如下所示:<JROCKIT_HOME>/jre/license.bea运行JRCMD如下:jrcmd.sh<PID>jrarecordingfilename=myrecording.xmltime=600(该文件被写入本地目录或者指定的完整路径/文件名)或jrcmd.sh<PID>print_threads。使用脱机JRA工具分析最后得到的myrecording.xml.zip文件。通过在<JROCKIT_HOME>/bin中执行JRAbinary,将该JRA工具放入此目录下。请查看JRCMD文档。JRockitMissionControl使用JRockit将下列内容添加到WebLogicInstance的启动行中:java-Xmanagement:autodiscovery=true,ssl=false,authenticate=false,port=7091使用<jrockit-install-directory>/bin/jrmc.exe(sh)启动JRockitMissionControl如有必要,将JRMissionControl的license.beafile文件添加到:<JROCKIT_HOME>/jre/license.bea在MissionControl的帮助下,JRARecordings、内存泄漏、潜伏物探查和监控能够全部在一处完成。堆/线程的测试期快照创建一个简单的、名称ctrhandler.act的文件并将其存放在<JROCKIT_HOME>/jre/bin/jrockit目录。执行线程转储命令时,例如,kill-3),JRockit会查看此文件并执行命令列表。ctrlhandler.act文件应该包含以下内容:#ctrlhander.actfilelocatedinthe<JROCKIT_HOME>/jre/bin/jrockitdirectoryset_filenamefilename=./jrocket_control_breakoutput.txtappend=truetimestampprint_threadstimestampversionprint_class_summaryprint_object_summaryincreaseonly=trueprint_threadsprint_threadsnativestack=trueprint_utf8pooltimestampprint_memusagetimestampheap_diagnosticstimestamp#ThefollowingisoptionalandisanotherwaytogenerateaJRArecordingjrarecordingfilename=./myjra.xmltime=600在Linux上配置-XXlargePages问题:为何使用largePages?回答:使用largePages的优点是可以锁定堆内存,并且不适用页面交换(还可以减少IOWait和GC)。在实际内存中,访问堆中的对象明显变快了。因此,为了实现性能目标,largePages选项是一个理想的选择。如果机器支持大页面,则cat/proc/meminfo的输出将如下所示:HugePages_Total:xxxHugePages_Free:
yyyHugepagesize:
zzzKB如果xxx为0,则没有分配任何大页面。如果不为0,则需要使用CONFIG_HUGETLBFS(位于“Filesystems”下面)和CONFIG_HUGETLB_PAGE(当CONFIG_HUGETLBFS被选时,自动被选上)配置选项构建Linuxkernel。接着,在Linux上分配大页。注意:只允许根用户分配大页面。装载文件系统。JRockit使用hugepages文件系统,它驻留在内存中。这些步骤可以完成文件系统的安装。每次机器重启时都需要完成实际装载和chmod命令,或者也可以将其添加到一个/etc/rc.d/rc.local类型的文件:
mkdir-p
/mnt/hugepages
mount-thugetlbfsnodev/mnt/hugepages
chmod777/mnt/hugepages分配大页面。这是通过指定应该分配的内存数量来自动执行的。在分配过程中,这些面页将被保留起来,不能像普通页面那样使用。它们的分配和解除分配方式如下:echo20>/proc/sys/vm/nr_hugepages此处,数字20指应该保留的页面数量。要解除分配,可以将分配页面设置为0。(注意:请参见后面Q&A部分以确定正确的数量。)如果并非所有请求的页面都被保留,那么可用内存就不够了。如果确要如此,内存很可能会有太多的碎片,那么我们的建议是重启机器。请注意,大页面不能被交换,所以一切都必须放在物理内存中。在RHEL3上,该文件的名称为/proc/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论