|
|
Mission Control是BEA JRockit JVM自带的一组以极低的开销来监控、管理和分析生产环境中的应用程序的工具。它包括三个独立的应用程序:内存泄漏监测器(Memory Leak Detector)、JVM运行时分析器(Runtime Analyzer)和管理控制台(Management Console)。BEA从JRockit R26版本就开始捆绑这个工具套件,目前最新的版本是3.0。最近我们使用其中的Runtime Analyzer对国内某著名行业解决方案进行性分析和调优。
JRockit Runtime Analyzer(JRA)是一个JVM分析器,是一个随需应变的“动态记录器”。它记录了Java应用程序和JVM在一段预定的时间内的详细记录。然后通过JRA应用程序对记录下来的文件进行离线分析。所记录的数据包括对方法的调用跟踪、错误的同步、锁定的分析,还有垃圾收集统计信息,优化决策以及对象统计信息和其他重要的应用程序/JVM行为。它的目的是让JRockit开发人员能够找到良好的方法来基于现实应用程序优化JVM,对于帮助客户在生产和开发环境中解决问题十分有用。
2.性能数据分析和调优
在本次项目中,操作|A和操作B的百人并发脚本执行完成的时间接近两分钟,因此我们使用JRA进行了2分钟(120秒)的记录。在GC常规信息中,我们发现在短短两分钟时间内,垃圾收集的总数高达365次,而由此造成的暂停时间有42.5秒之多。也就是说35%的执行时间是在做垃圾收集。
因为最大堆尺寸已经设置成1024M,对于32位操作系统上的Java应用已经是足够大了(在IA32构架下,由于操作系统给每个进程的最大内存寻址空间为1.8G,因此最大堆尺寸不能超过1.8G),因此堆的大小并不是造成频繁垃圾收集的原因。那么在高并发度的场景下,可能的影响因素很可能是Nursery大小。
Nursery 也称为新代,是指运行分代式垃圾收集器时,在堆中分配 新对象 的可用块区域。当 Nursery 变满时,会在新垃圾收集中单独对其进行垃圾收集。Nursery 大小决定了新收集的频率和持续时间。较大 Nursery 会降低收集的频率,但是会稍微增加每个新收集的持续时间。 Nursery 之所以具有价值,是因为 Java 应用程序中的大多数对象都是在新代中夭亡的。与收集整个堆相比,应首选从新空间中收集垃圾,因为该收集过程的开销更低,而且在触发收集时,新空间中的大多数对象均已死亡。在新收集过程中,JVM 首先确定 Nursery 中的哪些对象是活动的,此后将它们提升到旧空间,并释放 Nursery,供分配新的小对象使用。
Nursery的默认缺省值是10M/CPU,对于我们Clovertown服务器来说,只有20M。由于出现频繁收集的情况,那么我们推断是由于Nursery的默认值太低的原因。一方面在高并发用户的场景下,肯定是有大量的新对象产生,那么Nursery的空闲空间很容易就被耗尽。因此Nursery发生垃圾收集频率就会比较高。另一方面更短的垃圾收集间隔会使得新对象在Nursery的存活率提高因为很多新对象可能还没来得及使用完毕就已经发生垃圾收集。这样更多的对象会被提升到旧代,使得旧代的对象也会急剧增加,从而使得旧代发生垃圾收集的频率也增加。
因为JRockit JVM可以使用-Xns:<size>来设置Nursery的尺寸,我们要在保证垃圾回收停顿时间(garbage collection-pause)尽可能短的同时,尽量加大Nursery的尺寸,这在创建了大量的临时对象时尤其重要。推荐值是最大堆尺寸的10%,因此我们在JRockit的运行时参数上添加了 –Xns100m。再次运行脚本后,JRA收集的信息显示GC暂停时间骤降到15.3s,次数也有所减少,降到296:
Nursery大小
|
20M(默认值)
|
100M
|
GC暂停时间
|
42.5s
|
15.3s
|
垃圾收集的总数
|
365
|
296
|
平均暂停时间
|
116ms
|
52ms
|
此外,我们从方法信息中可以看到调用次数最多耗时间最长的两个方法分别是jrockit.vm.Locks.monitorEnterSecondStage和com.ABC.StateManager.makeState两个方法。展开前置任务后发现调用这两个方法最多的方法是com.ABC.SqlQueryAction.query。而jrockit.vm.Locks.monitorEnterSecondStage显然是JRockit实现锁机制的特定的API。因此我们怀疑是对数据库的操作时有资源互斥的现象发现。
考虑到高并发用户的场景下,对数据库操作的并发度也很高,因此对数据库连接的争用比较激烈。我们察看了一下当时WebLogic JDBC的配置,发现connection pool的大小只是缺省值20,相对来说偏小了,对性能会有一定的影响。因此我们增大connection pool的大小到100。重新运行测试脚本后发现性能有较大提升。
|
JDBC connection size 20 w/ default nursery
|
JDBC connection size 100 w/ 100M nursery
|
Increase %
|
操作A
|
22.125
|
12.079
|
83%
|
操作B
|
35.195
|
21.773
|
62%
|
在性能调优完成后,我们又进行了功能测试(回归测试),以验证上述改动没有影响系统的功能性正确。
四、小结
其实利用Mission Control对Java应用进行调优并不难,对吧?希望本次性能分析调优的过程可以给大家一些启发,今后可以应用到日常工作中。
本文出自 “Intel_ISN” 博客,请务必保留此出处http://intelisn.blog.51cto.com/626310/130730
分享到:
相关推荐
4. **性能调优**:利用JRockit Mission Control进行性能监控和调优,可以显著提升Java应用的性能,但需要一定的学习和实践经验。 5. **安全更新**:尽管JDK 1.6已经相当老旧,但在使用过程中依然要注意定期检查安全...
Oracle JRockit 6 ...总之,Oracle JRockit 6 Windows x32为32位Windows环境提供了一个高性能、实时优化的Java运行时环境,配以强大的监控和诊断工具,是开发者和运维团队进行复杂应用部署和性能调优的重要选择。
JRockit Mission Control是Oracle JRockit JVM的一个配套工具集,主要用于Java应用程序的监控、诊断和性能分析。版本4.1提供了以下功能: 1. **性能监视器**:实时监控JVM的运行状态,包括CPU使用率、内存分配、...
通过Mission Control,开发者可以获取大量的运行时信息,进行故障排查和性能调优。 在性能调优方面,JRockit提供了细粒度的性能调优选项,开发者可以根据自己的需求定制JVM参数,从而达到应用的最大效能。例如,...
JRockit以其优秀的垃圾收集算法、内存管理和性能分析工具而知名。 JRockit JDK 1.6.0_45是这个版本的特定构建,R28.2.7-4.1.0是其内部版本号,这代表了JRockit在当时的技术水平和改进。该版本是针对Windows x86_64...
2. **性能调优**:深入探讨如何使用JRockit Mission Control工具进行性能分析和诊断,包括CPU使用率、内存消耗、线程状态以及GC行为的监控。 3. **垃圾收集与内存管理**:解析JRockit的几种垃圾收集算法,如Stop-...
JRockit JVM在性能优化方面有其独特之处,尤其在垃圾回收(Garbage Collection)和内存管理方面,它采用了创新的算法和技术,如早期的飞行记录器(Flight Recorder)和使命令分析器(Mission Control)等工具,这些...
2. **JRockit Mission Control (JMC)**:这是一款强大的工具,可以帮助开发者监控和分析JVM的性能。通过JMC,我们可以实时查看内存使用情况,识别内存泄漏,设置性能阈值,并进行调优实验。 3. **内存泄漏检测**:...
3. **性能分析工具**:内置的JRockit Mission Control是一套强大的性能监控和诊断工具,可以帮助开发者和运维人员深入了解应用的运行状况,定位性能瓶颈。 4. **资源管理**:JRockit提供了精细的资源控制,包括内存...
- **JRockit Mission Control**:这是一款强大的性能分析和诊断工具,包含内存分析、线程分析、JVM监控等功能。 - **JRockit Visual GC**:可视化垃圾收集过程,帮助理解GC行为和性能瓶颈。 - **JRockit Memory ...
4. **JRockit诊断工具**:介绍JRockit Mission Control等诊断工具的使用,包括性能监控、内存泄漏检测、线程分析等功能,帮助开发者快速定位和解决问题。 5. **JRockit性能调优**:提供实战性的性能调优技巧,包括...
- **工具集**:JRockit附带了一系列诊断和分析工具,如Mission Control,帮助开发者进行性能调优。 - **许可证变化**:在Oracle的改动下,Oracle JRockit现在可以免费用于开发和内部产品使用,降低了企业使用成本...
4. **诊断和监控**:JRockit Mission Control提供了一系列强大的工具,如飞行记录器(Flight Recorder)和Java堆分析器(Heap Analyzer),用于性能分析、故障排查和调优。 5. **兼容性**:尽管JRockit是一个独立的...
1. **工具准备**:选用如JVM自带的日志分析、JRockit Mission Control、QuestCentral、p6spy等开源或商业工具进行监控和分析。 2. **设置**:对于数据库,限制连接数,确保测试数据足够;对于应用服务器,设置最小...
综上所述,通过深入了解 JVM 的基本概念、JRockit 的特点及其在 WebLogic Server 中的应用,我们不仅可以更有效地管理 Java 应用程序的性能,还可以利用 JRockit Mission Control 进行高级的监控和调优工作。...
3. **内存分析和诊断**:JRockit提供了强大的内存诊断工具,如JRockit Mission Control,可以深入分析内存使用情况,帮助开发者找出内存泄漏等问题。 4. **性能监控**:JRockit包含了一套全面的性能监控和调优工具...
3. **监控和调优**:利用JRockit Mission Control工具进行性能监控和问题排查,进行必要的调优操作。 总的来说,"jrockit-jdk1.6.0_181-linux_x86_64"是面向高性能服务器环境的优秀选择,尤其适合那些对响应时间和...
总结,JRockit JDK1.6.0_45 R28.2.7-4.1.0源码揭示了其在内存管理、JIT编译、并发优化等方面的独特设计,深入学习这些源码,有助于我们提升对Java运行时环境的洞察力,从而更好地进行程序设计和性能优化。
监控工具如JRockit Mission Control (JRMC) 和VisualVM等可以联机监控JVM的状态,而GC日志和JFR(Java Flight Recorder)则可用于脱机分析。另外,内存转储分析工具如MAT(Memory Analyzer Tool)和JProfiler等第三...