首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】2023年11月 大数据教学课程 013-JVM垃圾回收日志分析工具

【愚公系列】2023年11月 大数据教学课程 013-JVM垃圾回收日志分析工具

作者头像
愚公搬代码
发布2025-06-02 15:42:44
发布2025-06-02 15:42:44
8900
代码可运行
举报
文章被收录于专栏:历史专栏历史专栏
运行总次数:0
代码可运行

🚀前言

一些常见的JVM垃圾回收日志分析工具包括:

  1. GCViewer: 是一款功能强大的图形化GC日志分析工具,可以用来查看和分析不同格式的GC日志文件,提供了丰富的视图和图表,包括各种统计数据、堆和方法图等。
  2. GCEasy: 是另一个可视化的GC日志分析工具,能够自动识别并提出GC日志中的问题,并提供了诸如GC时间、JVM停顿等指标的故障排除建议。
  3. GCLogAnalyzer: 是一款基于Java的命令行工具,可以通过聚合和分析GC日志文件,帮助诊断性能问题并找到优化机会。
  4. jstat: 是JDK自带的命令行工具,可以用来监视JVM的状态和性能指标,如GC时间、堆内存使用情况等。通过该工具,可以手动地产生GC日志文件。
  5. jvisualvm: 是另一个Java自带的可视化工具,可以用于监控和分析JVM应用程序的性能和行为,包括GC统计信息、线程和内存快照等。

本文主要讲解GC Easy 可视化工具的使用

🚀一、JVM垃圾回收日志分析工具

🔎1.GC日志输出参数

输出参数

描述

-XX:+PrintGC

当垃圾回收时,打印出每次GC的详细信息。

-XX:+PrintGCDetails

在打印GC信息的基础上,还会打印详细的堆栈信息。

-XX:+PrintGCTimeStamps

在打印GC信息的基础上,还会打印每次GC的时间戳。

-XX:+PrintHeapAtGC

当垃圾回收时,打印堆的详细信息。

-XX:+PrintTenuringDistribution

在打印GC信息的基础上,还会打印关于对象年龄分布的信息。

-XX:+PrintGCCause

在打印GC信息的基础上,还会打印引起GC的原因。

-XX:+PrintGCDateStamps

在打印GC信息的基础上,还会打印每次GC的日期时间戳。

-XX:+PrintGCApplicationStoppedTime

在应用程序停止时,打印GC信息。

-XX:+PrintGCApplicationConcurrentTime

在应用程序运行时,打印GC信息。

-XX:+TraceClassLoading

打印类加载的详细信息。

-XX:+TraceClassUnloading

打印类卸载的详细信息。

-XX:+PrintStringTableStatistics

打印字符串常量池的详细信息。

-XX:+PrintAdaptiveSizePolicy

打印自适应分配策略的相关信息。

-XX:+PrintCompilation

当JIT编译器编译代码时,打印编译的详细信息。

-XX:+PrintInlining

打印方法内联相关的详细信息。

-XX:PrintGCApplicationConcurrentTime

在应用程序运行时,打印GC信息。

-Xloggc:

将GC日志记录到文件中。

参数使用测试

代码语言:javascript
代码运行次数:0
运行
复制
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx256m -XX:+PrintGCDetails -
XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -
Xloggc:F://test//gc.log

运行后就可以在F盘下生成gc.log文件

代码语言:javascript
代码运行次数:0
运行
复制
Java HotSpot(TM) 64-Bit Server VM (25.144-b01) for windows-amd64 JRE (1.8.0_144-b01), 
built on Jul 21 2017 21:57:33 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 12582392k(1939600k free), swap 17300984k(5567740k free)
CommandLine flags: -XX:InitialHeapSize=201318272 -XX:MaxGCPauseMillis=100 -
XX:MaxHeapSize=268435456 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -
XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+UseCompressedClassPointers -
XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation 
{Heap before GC invocations=0 (full 0):
 garbage-first heap   total 196608K, used 9216K [0x00000000f0000000, 
0x00000000f0100600, 0x0000000100000000)
 region size 1024K, 9 young (9216K), 0 survivors (0K)
 Metaspace       used 3491K, capacity 4500K, committed 4864K, reserved 1056768K
 class space   used 381K, capacity 388K, committed 512K, reserved 1048576K
2018-09-24T23:06:02.230+0800: 0.379: [GC pause (G1 Evacuation Pause) (young), 0.0031038 
secs]
   [Parallel Time: 2.8 ms, GC Workers: 3]
     [GC Worker Start (ms): Min: 378.6, Avg: 378.8, Max: 379.0, Diff: 0.3]
     [Ext Root Scanning (ms): Min: 0.0, Avg: 0.4, Max: 0.8, Diff: 0.8, Sum: 1.3]
     [Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
         [Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0]
     [Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
     [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1]
     [Object Copy (ms): Min: 1.8, Avg: 1.9, Max: 1.9, Diff: 0.1, Sum: 5.6]
     [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
         [Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 3]
     [GC Worker Other (ms): Min: 0.0, Avg: 0.2, Max: 0.6, Diff: 0.6, Sum: 0.6]
     [GC Worker Total (ms): Min: 2.4, Avg: 2.5, Max: 2.7, Diff: 0.3, Sum: 7.6]
     [GC Worker End (ms): Min: 381.4, Avg: 381.4, Max: 381.4, Diff: 0.0]
   [Code Root Fixup: 0.0 ms]
   [Code Root Purge: 0.0 ms]
   [Clear CT: 0.0 ms]
   [Other: 0.2 ms]
     [Choose CSet: 0.0 ms]
     [Ref Proc: 0.1 ms]
     [Ref Enq: 0.0 ms]
     [Redirty Cards: 0.0 ms]
     [Humongous Register: 0.0 ms]
     [Humongous Reclaim: 0.0 ms]
     [Free CSet: 0.0 ms]
   [Eden: 9216.0K(9216.0K)->0.0B(7168.0K) Survivors: 0.0B->2048.0K Heap: 
9216.0K(192.0M)->1888.0K(192.0M)]
Heap after GC invocations=1 (full 0):
 garbage-first heap   total 196608K, used 1888K [0x00000000f0000000, 
0x00000000f0100600, 0x0000000100000000)
 region size 1024K, 2 young (2048K), 2 survivors (2048K)
 Metaspace       used 3491K, capacity 4500K, committed 4864K, reserved 1056768K
 class space   used 381K, capacity 388K, committed 512K, reserved 1048576K
}
 [Times: user=0.00 sys=0.00, real=0.00 secs] 
{Heap before GC invocations=1 (full 0):
 garbage-first heap   total 196608K, used 9056K [0x00000000f0000000, 
0x00000000f0100600, 0x0000000100000000)
 region size 1024K, 9 young (9216K), 2 survivors (2048K)
 Metaspace       used 3492K, capacity 4500K, committed 4864K, reserved 1056768K
 class space   used 381K, capacity 388K, committed 512K, reserved 1048576K
2018-09-24T23:06:02.310+0800: 0.458: [GC pause (G1 Evacuation Pause) (young), 0.0070126 
secs]
。。。。。。。。。。。。。。。。。。。

🔎2.GC Easy 可视化工具

GC Easy是一款Java GC日志分析和可视化工具,可以帮助开发人员分析GC日志,找出GC瓶颈,并提出优化建议。

主要功能包括:

  1. 分析GC日志:GC Easy可以读取并分析GC日志文件,并提供可视化的图形化界面展示GC相关的信息,包括堆使用情况、GC时间、GC次数、对象分配情况等。
  2. 自动检测GC瓶颈:GC Easy可以自动检测GC瓶颈,并给出详细的优化建议。例如,如果发现GC暂停时间过长,可以建议优化对象分配方式、增加堆大小等。
  3. 可视化展示GC数据:GC Easy提供了多种可视化展示方式,包括堆使用情况图、堆内对象分布图、GC时间轴图等,可以帮助开发人员更直观地理解GC信息。
  4. 支持多种GC算法:GC Easy支持多种GC算法,包括Serial、Parallel、CMS、G1等,可以根据实际应用场景选择不同的GC算法进行优化。
  5. 导出报告:GC Easy可以生成详细的GC分析报告并导出为PDF、HTML、CSV等格式,方便开发人员对GC信息进行进一步分析和分享。

GC Easy网站:http://gceasy.io/

上传后,点击“Analyze”按钮,即可查看报告。


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀前言
  • 🚀一、JVM垃圾回收日志分析工具
    • 🔎1.GC日志输出参数
    • 🔎2.GC Easy 可视化工具
  • 🚀感谢:给读者的一封信
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档