Skip to content

日志分析工具(GCEasy/GCViewer)

GC 日志分析工具

GC 日志文件通常很大(几百 MB 到几个 GB),人工阅读几乎不可能。GC 日志分析工具把数据可视化,帮助你快速定位问题。

GCEasy:在线 GC 日志分析

简介

GCEasy 是最流行的在线 GC 日志分析工具,支持上传 GC 日志,自动分析并生成可视化报告。

网址https://gceasy.io/

功能特点

功能说明
自动解析支持所有主流 GC 收集器的日志格式
可视化图表GC 停顿时间、吞吐量、内存趋势
问题检测自动识别 GC 问题(频繁 FullGC、停顿过长)
建议优化基于分析结果给出调优建议
对比功能对比多次运行的结果

使用步骤

1. 打开 https://gceasy.io/
2. 上传 GC 日志文件(.log 或 .txt)
3. 等待分析完成(通常几秒到几分钟)
4. 查看分析报告

关键指标解读

GCEasy 报告包含以下核心指标:

GC 吞吐量:93.5%
↑ 93.5% 的时间用于运行程序,6.5% 用于 GC
↑ 推荐:> 95%

平均 GC 停顿时间:45ms
↑ 平均每次 GC 停顿时间

最大 GC 停顿时间:320ms
↑ 最长一次 GC 停顿

GC 停顿占总时间:6.5%
↑ 推荐:< 5%

典型问题识别

问题一:FullGC 频繁
指标表现:
  - Full GC 频率:每天 50 次
  - Full GC 原因:老年代使用率持续在 90%+
  建议:增大堆、使用 G1、检查内存泄漏

问题二:GC 停顿过长
指标表现:
  - 最大停顿:5.8 秒
  - 使用的收集器:Serial GC
  建议:切换到 G1 或 ZGC

问题三:MinorGC 过于频繁
指标表现:
  - MinorGC 频率:每分钟 50 次
  - 年轻代使用率:每次 MinorGC 后迅速回到 90%+
  建议:增大年轻代、减少对象分配

GCViewer:离线开源工具

简介

GCViewer(也叫 GCViewer)是 SourceForge 上的开源工具,用于本地分析 GC 日志。

下载地址https://github.com/chewiebug/GCViewer

功能特点

功能说明
本地分析无需上传,保护数据隐私
完全免费开源 MIT 许可
图表丰富GC 次数、时间、内存趋势图
数据导出CSV 导出,方便进一步分析
命令行支持适合自动化集成

使用步骤

bash
# 1. 下载 GCViewer JAR 文件
wget https://github.com/chewiebug/GCViewer/releases/download/1.34.1/gcviewer-1.34.1.jar

# 2. 运行(需要 Java 8+)
java -jar gcviewer-1.34.1.jar

# 3. 或命令行使用
java -jar gcviewer-1.34.1.jar \
    gc.log \         # 输入日志文件
    output.png       # 输出图表文件
    -t SUMMARY       # 只输出摘要

关键图表

GCViewer 生成多种图表:

图表说明
GC 时长 vs 时间显示 GC 停顿时间随时间的变化趋势
内存使用 vs 时间显示堆内存随时间的变化
GC 次数 vs 时间显示 GC 频率随时间的变化
吞吐量 vs 时间显示应用吞吐量随时间的变化

关键指标

Throughput: 94.3%
↑ GC 吞吐量,值越高越好

Avg Pause: 45ms
↑ 平均停顿时间

Max Pause: 320ms
↑ 最大停顿时间

Total Pause Time: 5.6min
↑ 总停顿时间

Minor GC Count: 500
↑ MinorGC 次数

Full GC Count: 3
↑ FullGC 次数

Promotion: 200MB
↑ 晋升到老年代的内存量

jstat:命令行实时监控

基本用法

bash
# 查看 GC 统计(每 1 秒刷新一次)
jstat -gcutil <pid> 1000

# 输出:
S0   S1   E    O    M    CCS   YGC    YGCT     FGC    FGCT     GCT
0.00 0.00 65.21 78.33 92.00 88.00  123    2.34     5    12.34   14.68

各列含义

含义
S0Survivor 0 使用率
S1Survivor 1 使用率
EEden 使用率
O老年代使用率
M元空间使用率
YGC年轻代 GC 次数
YGCT年轻代 GC 总时间(秒)
FGCFullGC 次数
FGCTFullGC 总时间(秒)
GCTGC 总时间

监控命令组合

bash
# 监控 GC 趋势(每 10 秒输出一次)
watch -n 10 'jstat -gcutil <pid>'

# 查看堆使用(-gccapacity)
jstat -gccapacity <pid>

# 输出:
NGCMN  NGCMX   NGC    S0C   S1C       EC         OGCMN    OGCMX      OGC         MCMN   MCMX      MC      CCSMN   CCSMX      CCSC    YGC    FGC
102400.0 102400.0 102400.0 10240.0 10240.0 81920.0 1884160.0 1884160.0 1884160.0  0.0 1085440.0 107929.6    0.0 1048576.0 106496.0    0  5

MAT:堆转储分析

当 GC 日志无法定位问题时,需要分析堆转储:

bash
# 生成堆转储(JDK 9+)
jcmd <pid> GC.heap_dump /tmp/heap.hprof

# JDK 8
jmap -dump:format=b,file=/tmp/heap.hprof <pid>

然后用 Eclipse MATJProfiler 分析 dump 文件:

工具说明
Eclipse MAT免费,功能强大,推荐
JProfiler商业软件,功能全面
VisualVMJDK 内置,够用
async-profiler开源,CPU 和内存分析

工具选择建议

场景推荐工具
快速在线分析GCEasy
离线分析,保护隐私GCViewer
实时监控jstat / jconsole / VisualVM
深度堆分析Eclipse MAT
生产环境诊断Arthas + GCViewer

本节小结

GC 日志分析工具速查:

工具类型适用场景
GCEasy在线快速分析,推荐首选
GCViewer离线开源本地分析,数据隐私
jstat命令行实时监控
jconsole图形界面实时监控 + JMX
VisualVMJDK 内置综合分析
Eclipse MAT堆 dump 分析内存泄漏定位
Arthas命令行线上诊断

GC 调优的正确流程是:GC 日志分析 → 发现问题 → 针对性调优 → 验证效果 → 重复

到这里,「GC 日志分析」部分全部完成,「垃圾回收(GC)核心」全部完成。

基于 VitePress 构建