IBM的Java诊断,第5部分 - 编程入门网
r 的 Garbage Collection ****图,它包含已用堆(用于估计应用程序的内存使用)和暂停时间(用于估计 GC 的性能影响)的形象化显示,以及一个 GC 统计摘要表和一组推荐方法,其中包括命令行建议(如果 需要的话)。
图 6. Garbage Collection ****图 IBM的Java诊断,第5部分(5)时间:2011-11-02 IBM Toby Corbin评估 GC 的性能影响时,需要检查的最重要的项目是暂停时间和开销:用于进行垃圾收集而不是执行 应用程序工作的时间的比例。图 7 展示了 Health Center 计算的 GC 开销。如果开销值较高,则应用程 序可用的处理时间就不足。如果暂停时间值较高,则应用程序响应性就低,因为应用程序活动将在 GC 暂 停期间停止。 图 7. GC 开销展示表 GC 性能改进策略 GC 的性能影响可以通过几种方法降低。第一种方法是生成更少的垃圾。应用程序是否创建对象并立即 丢弃这些对象?字符串被反复连接并没有使用字符串缓冲?自动装箱(autoboxing)是否在后台创建无关 的原语包装器吗?代码正在生成不需要的大对象吗?其他性能改进方法包括提高堆大小、调整保育室 (nursery)大小(用于分代收集器)和尝试另一个 GC 策略。但是,使用这些技术时要小心。 例如,调优代码以改进 GC 时必须小心。某些明显的优化可能最终会导致更糟糕的性能。例如,通过 重用现有对象实例来避免重复创建对象看起来很不错。但是,安全地管理对象池可能会导致同步开销。如 果对象池大小没有正确调优,许多未使用的对象实例最终会被闲置,耗尽内存而不产生任何价值。然而, 最严重的是,使用一个分代垃圾收集器(比如 gencon 策略所使用的)时,短期存在的对象根本收集不到 ,而长期存在的对象的收集成本则太昂贵。重复创建并丢弃对象的方法产生很小的性能开销,而持有现有 对象实例以便重用的方法则为垃圾收集器增加大量的工作负担。 另一个 GC 调优陷阱是过度关注减小 headline GC 开销(参见 图 7),而忘记了总体目标是优化应 用程序 的性能。尽管减小 GC 开销通常会提高应用程序性能,但也有例外情况。例如,使用 gencon 策 略执行 GC 花费的时间通常比使用 optthruput 策略花费的时间更多。但是,由于 gencon 策略在堆中放 置对象的特定方式,该策略支持更快的对象分配和更快的对象访问。由于应用程序通常花费很多时间来分 配和访问对象,所以,对多数应用程序来说,在这个区域获取的性能改进(没有在 GC 开销中反映出来) 超出了 GC 本身的额外成本。甚至还有更具戏剧性的例子:optavgpause 策略几乎能同时执行所有 GC 工 作,只有非常短的 “stop-the-world” 暂停。这导致非常低的 GC 开销(通常低于 1%)和极好的应用 程序响应性。但是,在应用程序吞吐量方面不如 optthruput 或 gencon 策略。 检查锁争用 当一个锁当前正在使用,而另一个线程试图获取它,那么就会出现锁争用。以下三种锁会出现较高程 度的争用:经常获取的锁,长期占用的锁,以及经常使用且长期占用的锁。一个高度争用的锁(许多线程 试图访问的锁)可能会变成系统中的一个瓶颈,因为每个正在运行的线程在其需要的锁可用之前都会暂停 执行,从而限制了应用程序的性能。同步很可能会阻止应用程序的可伸缩性;系统中的线程数越多,用于 等候锁而不是执行有用的工作所花费的时间也就越多。Health Center 可视化锁行为并突出显示那些正在 阻塞请求且有可能影响性能的锁。 图 8 展示了 Health Center 的 Locking ****图: 图 8. Locking ****图 IBM的Java诊断,第5部分(6)时间:2011-11-02 IBM Toby Corbin要理解图 8 展示的柱形图,您需要理解显示的数据。柱形图中的竖条用颜色编码,从绿色到红色,以 显示争用的程度。激烈争用的锁显示为鲜红 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |