中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> SUN专区 > Java技术 > J2SE
使用GC Portal 来分析和优化垃圾回收的性能
作者:Alka Gupta 时间:2005-09-04 18:36 出处:互连网 责编:wqh21
              摘要:通过挖掘由 JVM 生成的 verbose:gc 日志 ,GC Portal 可以从垃圾收集(GC)的角度来对 Java 应用程序进行分析和性能调优。使用 GC Portal 可使开发人员从垃圾收集的角度来对应用程序和 JVM 行为建模。本文介绍了 GC Portal 的设计和功能,使得开发人员可将其用作分析和 调优垃圾收集的一种工具。

 

本文已经过更新,以包括针对 Linux 和 Java Desktop System (JDS )的 GC Portal 软件,其均可用于 Sun Java System Application Server 7 (以前称为 Sun Java System Application Server 7 (S1AS7)) 和 Tomcat Server。该款 GC Portal 软件最初仅用于 Solaris 和 Windows。该版本的 GC Portal 软件还含有集成到 GC Portal 中的 VisualGC。

通过挖掘由 JVM 生成的 verbose:gc 日志 ,GC Portal 可以从垃圾收集(GC)的角度来对 Java 应用程序进行分析和性能调优。GC Portal 是针对垃圾收集问题的“一站式”页面,并含有大量白皮书、示例案例研究和其他材料。这个 Portal 旨在与 Sun Microsystems 的 HotSpot JVM 一起使用,作为 J2SE 的一部分来发布的。使用 GC Portal 可使开发人员从垃圾收集的角度来对应用程序和 JVM 行为建模。本文介绍了 GC Portal 的设计和功能,使得开发人员可将其用作分析和 调优垃圾收集的一种工具。

为了生成由门户为了分析而处理的 verbose:gc 日志,GC Portal 要求由 JVM 使用以下的 switch 语句:

    -verbose:gc
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails

为了给 GC Portal 生成相应的日志,不需要使用其他的 JVM switch 语句,但是如果认为适合于调优 JVM 以及应用程序的规模和性能,也可以添加其他语句。
注意: -XX switch 语句是非标准的,在今后的 JVM 版本中可能会改变,恕不另行通知。

从垃圾收集的角度进行应用程序建模和性能调优

Java 应用程序建模使开发人员能够消除由于垃圾收集暂停的频率和持续时间的而引起的不可预知性。这些暂停直接与以下因素相关:

  • 已创建并存活的对象的数目和总大小
  • 这些对象的平均生存时间
  • JVM 堆的大小

根据 GC Portal 为输入到门户的特定 verbose:gc 日志文件集所提供的分析,开发人员可以构建模型,这样可帮助他们更好地了解应用程序和 JVM 行为。

verbose:gc 日志包含了有关以下方面的有价值信息:

  • 垃圾收集暂停时间
  • 垃圾收集的频率
  • 应用程序
  • 已创建和已毁灭对象的大小
  • 对象创建的速率
  • 每次垃圾收集所回收的内存

可以对应用程序的行为绘制出图形并进行分析,以确定暂停持续时间、暂停频率、对象创建速率和被释放内存间的不同关系。对该信息的分析可使开发人员通过指定给定情况下的最佳堆大小、其他 JVM 选项以及可选的垃圾收集算法来调优应用程序的性能、优化垃圾收集的频率和收集时间。

来自 verbose:gc 日志的信息,用于分析垃圾收集行为并对其建模

该类信息可用于垃圾收集过程的性能调优。

新一代和老一代中的平均垃圾收集暂停
在 JVM 中进行垃圾收集时应用程序被暂停的平均时间。

新一代和老一代中的平均垃圾收集频率
垃圾收集器在新一代和老一代中运行的周期性。由于每个 GC 活动的时间实例都已记入日志,所以该信息是可以获得的。

垃圾收集连续开销
为进行垃圾收集而暂停应用程序的系统时间百分比。计算公式:平均垃圾收集暂停时间 * 平均垃圾收集频率 * 100%

垃圾收集并发开销
垃圾收集与应用程序运行并发进行的系统时间百分比。计算:平均并发垃圾收集时间(清除阶段)* 平均并发 GC 频率 / CPU 编号

在新一代和老一代中每次垃圾收集所回收的内存
每次垃圾收集期间所收集的总垃圾。

分配率
在新一代中应用程序分配数据的速率。如果新一代的堆的 occupancy_at_start_of_current_gc=x, occupancy_at_end_of_previous_gc = y 并且垃圾收集频率是每秒 1 次,那么分配率大约是每秒 x-y。

提升率
数据被提升到老一代的速率。

应用程序所分配的总数据
这是应用程序在每次事务处理中所分配的总数据。

总数据可以分成短期数据和长期数据
长期数据就是新一代垃圾收集周期中仍存活并且被提升到老一代的数据。

短期数据
短期存活的数据消亡得很快且被收集在新一代垃圾收集中。可以拿总数据减去长期数据来计算。

总的活动数据
这是在任何时间实例中总的存活数据。这对构建用于调整 JVM 堆大小的模型是至关重要的。例如,对于每秒加载 100 个事务,每个事务具有 50K 的长期数据,最短持续 40 秒,则老一代数据的最低内存占用将是:

            50K*40s*100 = 200M

内存泄露
通过监视这些日志中所示的每次清除中所收集的垃圾,可以检测到内存泄露,并能更好地理解“内存不足”错误。

生成垃圾收集日志的标志和 Switch 语句

JVM 可以记录到文件中的有用 GC 相关信息很多。GC Portal 使用该信息,从垃圾收集的角度来调优应用程序以及 JVM 的大小和性能。 当 Java 应用程序使用以下 switch 语句运行时,将生成含有详细垃圾收集信息的这些日志:

-verbose:gc
该标志打开垃圾收集信息的日志记录功能。在所有 JVM 中均可用。

-XX:+PrintGCTimeStamps
输出相对于应用程序开始时 GC 发生的时间。仅从 J2SE 1.4.0 中可用。

-XX:+PrintGCDetails
给出关于垃圾收集的详细信息,如:

  • 垃圾收集前后新一代和老一代数据的大小
  • 总堆的大小
  • 垃圾收集在新一代和老一代中进行所花费的时间
  • 在每次垃圾收集中所提升对象的大小

仅从 J2SE 1.4.0 中可用。

为应用程序建模和性能调优使用 GC Portal

GC Portal 可用于更好地理解应用程序的垃圾收集行为,以便调优性能并调整应用程序大小,从而使其能在 lean、peak 和 burst 条件下最佳地运行。它支持 J2SE 1.2.2、J2SE 1.3、J2SE 1.4 和更新的J2SE 1.4.1,包括两个新的垃圾收集实现:并行收集器和并发收集器。它还允许开发人员提交垃圾收集日志文件并根据这些日志文件分析应用程序行为。它也考虑了某些特定于应用程序和特定环境的信息,包括:

  • 事务处理速率或服务器负载
    这适用于运行在客户端-服务器配置中的一般的服务器端应用程序。对于这样的应用程序,这是客户端可能为服务器生成稳定负载以进行处理的速率,并且这对于服务器的稳定状态分析是很有用的。稳定状态分析可以包括情况,如最差/峰值/突发状况或平均状况。该信息不是强制的,如果它不可用或者不适用,可以将其忽略。在这样的情况下,门户所表示的某些信息应该也可以被忽略,包括:
    • 理论吞吐量
    • 短期数据
    • 长期数据
  • 目标机器上的处理器数目
    该信息由门户用于进行某些计算,如并发 GC 开销。
  • 应用程序所用的 JVM 版本(1.2.2_xx、1.3.x、1.4.0、1.4.1)
    由于 verbose:gc 日志格式不是标准的,不同的 JVM 中会有变化,所以 GC Portal 需要该信息。

GC Portal 设计

GC Portal 由 4 个引擎组成:

  • 分析器和报告引擎
  • 图形引擎
  • 智能引擎
  • 会话和存储引擎
  • VisualGC

分析器和报告引擎

  • 加载 verbose:gc 日志文件、进行信息挖掘并报告:
    • 在新一代和老一代中的垃圾收集暂停
    • 在新一代和老一代中的垃圾收集频率
    • 对象分配的速率
    • 对象从年轻提升到老一代的速率
    • 总的垃圾收集时间
    • 总的应用程序时间
    • 新一代和老一代的最初和最终堆大小
    • 垃圾收集连续开销
    • 垃圾收集并发开销
  • 计算并表示应用程序相关信息
    • 每个事务的短期数据
    • 每个事务的长期数据
    • 理论最大吞吐量
    • CPU 效率
    对于不是基于事务的应用程序,该信息可以忽略,但对于客户端应用程序或者那些可能出现极为逐步行为的应用程序则是重要的。

  • 随时间的变化表示应用程序和 JVM 的详细垃圾收集相关行为
    • 用户可以查看垃圾收集数据, 对于整个运行以选定的时间间隔采样。
    当应用程序随着时间的变化会显示出不同的行为,如状态、循环或随机地反应应用程序,以及平均汇总信息作为结果可能被曲解时,对整个运行在选定的间隔所采样的详细 垃圾收集信息非常有用。当其随时间而变化时,这些详细的和采样的信息可用于查看应用程序和 JVM 行为。

  • 在新一代和老一代中随时间变化的详细内存回收信息
    • 垃圾收集前的内存
    • 垃圾收集后的内存
    • 每次垃圾收集所释放的内存


  • 在新一代中对象的老化信息
    • 如果使用 -XX:+PrintTenuringDistribution switch 语句来生成日志文件时可用。

图 1 是一个由 GC Portal 的分析器引擎所提交的示例报告抓图。

图 1. GC Portal 的分析引擎抓图
(点击看大图)

 

图形引擎

由分析器引擎以表的形式所提交的大部分信息都可以图形表示出来。可以向同一个图形中加入多个图表以帮助进行比较。

  • 详细的时间线垃圾收集分析图形表示
  • 每次垃圾收集的内存回收信息的图形表示
  • 来自于不同日志文件 GC 信息的图形比较
  • 每个“年龄”的对象生存时间延续的信息的图形表示

图 2. GC Portal 的图形引擎抓图
(点击看大图)

智能引擎

智能引擎由以下几部分组成:

  • 一般的推荐

    该部分提供了有关调优垃圾收集性能的一般信息和推荐文章。这个门户并不提供动态推荐或自动调优。推荐包含关于如何进行以下工作的一般信息:
    • 减少垃圾收集的暂停和频率
    • 减少垃圾收集连续开销
    • 调整新一代和老一代堆的大小以处理给定的负载
    • 检测内存泄露
    • 选择收集器
    • 选择不同的 JVM 选项和 switch 语句
  • 经验性建模

    根据从多个 verbose:gc 日志所分析出的数据来对应用程序运行划分等级,用户可以根据以下选择来选择用于建模的文件(在所有这些已加载的文件中选择):
    • 事务处理速率
    • 处理器数目
    • 新一代的大小
    • 老一代的大小
    • JDK 版本
    • 堆大小

    用户可以根据以下标准来对最佳的 JVM 环境划分等级:
    • 垃圾收集暂停
    • 垃圾收集顺序开销
    • 垃圾收集频率
    • CPU 效率
    用户也可以查看不同运行的图形比较。

图 3. GC Portal 的智能引擎抓图
(点击看大图)

  • 通过 "what-if" 场景来调优大小和性能的计划

    垃圾收集的行为方式会随着新一代大小的改变而改变。该功能目前受到限制,仅工作在使用并发收集器的 J2SE1.4.1(及以上)上。
    计划输出显示以下方面的可能变化:
    • 垃圾收集暂停
    • 垃圾收集频率
    • 垃圾收集顺序负载
    • CPU 使用率 (%)
    • 加速
    • 分配速率
    • 提升速率
    • 短期数据的大小
    • 长期数据的大小
  • 案例研究
    一些关于如何从垃圾收集角度进行性能调优的现实案例。
  • 白皮书

    指向某些有关垃圾收集调优的深入信息的白皮书
  • 会话和存储引擎

    • 管理用户会话
    • 管理并存储用户配置文件
    • 安全地管理并存储用户数据/日志
    • 确保用户/数据日志可用于参考查看和经验性建模

    图 4. GC Portal 的存储引擎抓图
    (点击看大图)

    VisualGC

    visualgc 工具隶属于一个 HotSpot JVM,它收集并以图形方式显示垃圾收集、类加载器和 HotSpot 编译器性能数据。它与 GC Portal 结合在一起,在 JVM 运行时收集有关垃圾收集的信息。GC Portal 使用 webstart 工具来在浏览器中运行和显示 visualGC 信息。有关该工具的更多信息可在 CoolStuff - jvmstat 网页获得。用于从 GC Portal 内运行 VisualGC 的 ReadMe 文件内建到 GC Portal 软件中。

    下载和运行 GC Portal

    请阅读 ReadMe 部分以下载、配置和运行 GC Portal 软件。

    致谢

    作者要感谢 Mayank Srivastava、Nagendra Nagarajayya、Nandula Narasimham 和 S.R.Venkatramanan,感谢他们对 GC Portal 的贡献。同时还要感谢 Sun JVM 垃圾收集架构师和专家 John Coomes、David Detlefs、Steve Heller、Peter Kessler、Ross Knippel、Jon Masamitsu、James Mcilree 和 Y.S. Ramakrishna,感谢他们对本文的帮助和指导。作者还要感谢 Sun 的 JVM 性能团队成员 Timothy Cramer 和 Brian Doherty (VisualGC 和 jvmstat 工具的编写者),感谢他们有关将 VisualGC 集成到 GC Portal 中的帮助。

    关于作者:

    Alka Gupta 是 Sun 的 Technical Staff 部的成员。他负责与 Sun 的 ISV 和合作伙伴一同工作,并帮助他们快速而高效地采用 Sun 新推出的技术和平台。她在 Sun 平台上的性能调优领域已经工作了将近 10 年。Alka 毕业于印度理工大学(IIT)。

    参考资料

     

    关闭本页
     
    首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
    Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有