【问题标题】:Analyze GC logs for Sun Hotspots, JVM 6分析 Sun Hotspots、JVM 6 的 GC 日志
【发布时间】:2009-12-03 12:29:08
【问题描述】:

我正在尝试分析我们的应用程序的 GC 行为(在 Tomcat 中运行,在 Sun 的热点JVM 1.6 下)。 p>

到目前为止,我已经指示 JVM 使用...将 GC 日志发送到单独的文件中。

-Xloggc:gc.log 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintGC 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDetails

...并使用 jstat 输出日志使用...

jstat -gc -t 29045 5s > jstat.gc

我看到了有趣的信息,但没有找到帮助我分析/可视化这些日志的工具。我被this question 指向GCViewer,但它只解析gc.log 中的几行日志,然后因异常而崩溃。对于我正在使用的特定 JVM,是否有更好或更新的工具来解析这些特定日志?

【问题讨论】:

    标签: java garbage-collection logging jstat


    【解决方案1】:

    gcviewer 已多年未更新,因此时好时坏 - 一些 gc 文件可以正常工作,而另一些会出现异常。

    IBM 的 gc 日志解析器工作正常, http://www.alphaworks.ibm.com/tech/pmat/faq

    Sun 有一个叫做 GCPortal 的东西,但它需要:

    • 安装到网络应用服务器
    • 安装 awk 和 perl
    • 使用 JDBC 驱动程序和配置安装 RDBMS
    • 和真正的杀手,第三方图形/图表软件曾经是免费的,现在不是。 惊人的。

    gchisto 已经死了,项目中不再有任何东西。

    HPJmeter 不理解 IBM gc 文件。

    【讨论】:

    【解决方案2】:

    IBM Support Assistant 中提供的工具做得很好。

    【讨论】:

      【解决方案3】:

      我个人使用HP JMeter 进行很多 GC 可视化。它在 SUN JRE 上运行“正常”,在 HP 的 JRE 上运行良好(如图)。

      对于 Sun HotSpot 1.6(在非 HP 平台上),我使用这些 GC 选项来生成日志以供分析:

      -Xloggc:/path/to/vgc/log/location/logfile.vgc  --XX:+PrintHeapAtGC 
      

      【讨论】:

      • 我记得用过,但是现在的 HPJmeter 似乎与 Oracle JRE gc.log 不兼容
      • 我在任何版本的 oracle 最新 JVM 上使用 HP-JMeter 时都没有遇到问题(无论如何都是 1.7),使用上面列出的选项。
      【解决方案4】:

      你看过 jvisualvm 吗?附带最新的 JDK,并允许您观看 JVM。示例输出(使用 visualGC 插件)。示例输出 - alt text http://g4u0420c.houston.hp.com/en/5992-4687/img/visualgc_2.png

      【讨论】:

      • 我看到了,但它只能告诉我 JVM 现在的表现如何(或者过去一些有限的时间)。我想知道 10,20,100 小时前发生了什么。
      【解决方案5】:

      我尝试使用 Visual GC,但它似乎适用于 id 进程(jvm one 或 jstatd one)。我不能将它与 jstat.gc 一起使用,我的意思是文件而不是流 对吗?

      【讨论】:

        【解决方案6】:

        尝试使用 gchisto (gchisto.dev.java.net)。它可以理解 GC 日志输出(我不确定它是否已更新为与 G1 GC 一起使用)。你必须从 CVS 获取源代码(你需要一个 dev.java.net 帐户)并自己构建它

        【讨论】:

          【解决方案7】:

          这是一个 0.00 美元的日志抓取工具,适用于 1.5 CMS 收集器,它为您提供 GC 暂停的高级视图。

          您可能需要将位置参数 $7 参数更改为时间戳函数以匹配您的日志行语法(我的 .out 被 Tanuki Wrapper “增强”)。

          #! /usr/bin/awk -f
          # Awk script to parse .out logs and print total of
          # stop-the-world GC pause times in ten minute intervals
          
          BEGIN {print "t\timark\tmark\tremark\tfullgc"}
          
          /CMS-initial-mark:/ {
            t=timestamp($7);
            imark[t] += $(NF-1);
          }
          
          /\[CMS-concurrent-mark:/ {
            t=timestamp($7);
            split($(NF-1), b, "/");
          #  print t" NF="NF" val="b[1];
            mark[t] += b[1];
          }
          
          /CMS-remark/ {
            t=timestamp($7);
            remark[t] += $(NF-1);
          }
          
          /\[Full GC / {
            t=timestamp($7);
            level=0;
            for (i=1; i<=NF; i++) {
                if ($i ~ /\[/) {
                  level++;
                } else if ($i ~ /\]/) {
                  level--;
                }
            }
            while (level > 0) {
              getline;
              for (i=1; i<=NF; i++) {
                if ($i ~ /\[/) {
                  level++;
                } else if ( $i ~ /\]/ ) {
                  level-- ;
                }
              }
            }
            if ( $(NF) ~ /secs\]/ ) {
              full[t] += $(NF-1) ;
            }
          }
          
          function timestamp(str) {
            split(str, a, ":");
            return a[1]":"substr(a[2],0,length(a[2])-1)"0";
          }
          
          # print out UK+US trading hours
          
          END {
            for (hour = 5; hour <= 16; hour++) {
              for (minute = 0; minute <= 59; minute+=10) {
                t = sprintf("%02d:%02d", hour, minute);
                printf "%s\t%d\t%d\t%d\t%d\n", t, imark[t], mark[t], remark[t], full[t];
              }
            }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多