有没有Java垃圾回收日志分析工具?

56

我正在寻找一个工具或脚本,能够从我的Web应用程序中获取控制台日志,解析垃圾回收信息,并以有意义的方式显示出来。

我正在使用Sun Java 1.4.2 JVM,并启用了以下标志:

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

日志输出如下:

54.736: [Full GC 54.737: [Tenured: 172798K->18092K(174784K), 2.3792658 secs] 257598K->18092K(259584K), [Perm : 20476K->20476K(20480K)], 2.4715398 secs]

如果我有一个工具可以可视化地绘制垃圾回收趋势,那么理解几百个这样的日志条目将更加容易。


2
有一个商业产品 JClarity Censum,我还没有尝试过。然而,它的作者所做的这个演讲对于 Java GC 的了解非常有帮助:http://www.infoq.com/presentations/Visualizing-Java-GC - Dan Pritts
12个回答

33

2
gcviewer于2008年发布。它能正确解析Sun JVM 1.6日志吗?对我来说,它生成了很多“NumberFormatException”,但显示了一些信息。问题是:我能相信它吗? - dma_k
到目前为止,我认为你可以信任它。 - kohlerm
12
我强烈推荐从 https://github.com/chewiebug/GCViewer 获取最新版本。 - Yves Martin

17

这个不是完美的,但它能做我需要它做的事情。它似乎更适用于IBM JDK,但它大部分可以处理Java GC日志格式。有一些信息没有被解析出来,但大部分数据都在那里。谢谢! - braveterry
IBM现在提供了一套工具,打包在一个非常大的软件包“IBM Support Assistant”中。http://www-01.ibm.com/support/docview.wss?uid=swg27023689 对于GC日志分析,您必须使用“Garbage Collection and Memory Visualizer(GCMV)”。 - Yves Martin
IBM还提供了“Java垃圾收集器模式建模和分析工具(PMAT)”(最近更新于2012年11月)。https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=22d56091-3a7b-4497-b36e-634b51838e11 - Julien Kronegg

12
我认为有些人添加了Java探针,实际上并没有像问题所述的那样解析垃圾回收日志...
我已经尝试了其他工具(gcviewer、gchisto、IBM的),而我发现用于分析GC日志的最佳工具是HPjmeter
它主要用于HP-UX JVM,但通常也适用于Sun JVM,并且表现出色。 alt text (来源:xebia.com

我正在使用HPjmeter 4.1.00.00进行测试,但无法打开Sun JDK日志文件。它们的格式与braveterry在他的问题中提到的格式相同。 - dma_k
通常情况下,它适用于Sun JVMs,但我在阅读一些CMS GC消息时遇到了问题,不得不过滤以加载文件。这些日志是来自哪个JDK版本的?使用了哪些GC参数来启动JVM? - fglez
  1. 将文件类型组合框更改为显示所有文件
  2. 使用 -Xloggc:<file> 替代 -verbose:gc
- fglez
只需将Sun JDK详细GC日志从.log重命名为.hprof,您就可以在HPJMeter中加载它们。这是一个非常棒的工具。GCViewer不能处理一些Sun JDK 1.6日志,但对此没有问题。 - Ashwin Jayaprakash
1
我即使将文件重命名为.hprof,仍然会收到“文件中没有有用数据”的错误。问题显然不是文件名,因为我只需输入名称即可打开.log文件。 - haridsv
显示剩余2条评论

10

我尝试了一个在线工具http://gceasy.io,它可以读取我的sun jdk 1.8 gc日志。


似乎对JRockit也适用。 - mrswadge

7
比jconsole更好的工具是由Sun免费开发和分发的visualvm。它有一个名为gchisto的GC分析插件,可能会对您有所帮助。 编辑:抱歉,我没有看到您需要JDK 1.4.2版本。在这种情况下,visualvm无法帮助您。

GC Histo很好。但是他们还应该将堆大小添加到分析中。 - Shashikant Kore
1
@fred-o:visualvm 看起来不错,但如何在其中打开 GC 日志呢? - dma_k

7
我发现处理IBM和Hotspot JVM日志并将其可视化的最强大工具是IBM的PMAT: https://www.ibm.com/developerworks/mydeveloperworks/groups/service/html/communityview?communityUuid=22d56091-3a7b-4497-b36e-634b51838e11 我发现它比IBM支持助手中的工具更快,提供更多细节。 它正在不断更新,最近是在2012年7月。
然而,似乎在解析具有策略CMS的日志时存在一些问题,但希望这个问题能被修复。
PrintGCStats也很好,并提供良好的统计数据,但不能进行随时间的可视化,需要改进。

5

我使用YourKit java profiler,它可以帮助你测量这种情况以及更多其他情况,但是它使用自己的格式而不是分析日志。它在Java 5下可以做更多的事情,但应该也可以在1.4下工作。


3

试试来自Sun的VisualGC。有JDK 4和5版本,可以很好地显示Eden、代际和永久空间中正在发生的事情。您需要添加一个JAR并获取PID,然后就可以使用了。


2
VisualGC也可以作为VisualVM中的图形插件使用,但它只能在“实时”模式下工作,据我所知无法处理GC日志文件。 - Yves Martin
是的,我现在也会推荐使用Visual VM。我是三年前写的这篇文章,时过境迁。我不会重新访问每个答案并使其保持最新状态。 - duffymo
3
我同意。我只想指出,这个问题是关于“离线”分析GC日志文件,而VisualGC是一个“实时”的工具。 - Yves Martin

3
几年前,Hotspot GC组的John Coomes发布了PrintGCStats,这是一个awk脚本,用于“总结垃圾收集的统计信息,特别是gc暂停时间的总数、平均值、最大值和标准偏差”。该脚本的副本托管在java.net上:http://java.net/projects/printgcstats

2

VisualVM的gchisto插件无法使用https://gchisto.dev.java.net/

我有一个包含jdk1.6 printgc所有详细信息的文件,但找不到可以读取它的工具。以前我们使用HPjmeter来处理jdk1.5,但现在使用jdk1.6就不行了。

尝试过以下方法:IBM Pattern Modeling和Analysis Tool for Java Garbage Collector--无法识别文件。GCCollector无法工作,一直在读取文件进行分析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接