Skip to content

常见问题

如何开启 GC 日志?

开启 GC 日志。简版:

  • Java 9+: -Xlog:gc*:file=gc.log:time,uptime
  • Java 8: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log

我的日志会被上传到服务器吗?

不会。 EasyGC 完全在浏览器里用 JavaScript 解析日志,不传输、不存储、不记录任何内容。页面加载完成后断网也能用,也可以自行拉取源码部署。

支持哪些格式?

主流 JVM GC 日志格式全部支持:G1 / ZGC / Shenandoah 的统一日志(-Xlog:gc*,Java 9+),以及 Serial / Parallel / ParNew+CMS / G1 的传统 PrintGCDetails 输出(Java 8 及更早),覆盖 Java 1.2 到 25。无法识别的行会被跳过并在报告头部计数。

报告提示"未能识别任何 GC 事件"

大概率是日志没有真正开启 GC 日志,或者文件被截成了非 GC 内容。请核对 JVM 参数,并确认文件里确实有 GC(...)[GC (Allocation Failure) 之类的行。

为什么解析的行数比文件行数少?

只有描述 GC 活动的行才会被解析。明细行(分区统计、安全点、混入的应用日志)会被有意忽略——报告头部会精确显示"已解析 x / 总 y 行"。

多大的 GC 吞吐量算健康?

大多数服务 95% 以上算健康;批处理可以更低。低于 90% 意味着约十分之一的 CPU 花在了垃圾回收上,值得调优。

Full GC 一定是坏事吗?

基本是的:它会停住整个 JVM,是代价最高的回收。启动阶段偶发一次 Full GC 无伤大雅;反复出现说明老年代压力过大——要么加大堆,要么找出泄漏。

分析器发现了内存泄漏,接下来怎么办?

  1. 在压力场景下复现,并抓取堆转储(-XX:+HeapDumpOnOutOfMemoryErrorjmap)。
  2. 用堆转储分析工具(HeapHero、Eclipse MAT)分析支配树。
  3. 优先排查缓存、ThreadLocal、静态集合和监听器注册——这些是惯犯。

离线能用吗?

能——页面加载后全部在本地运行。也可以将静态构建产物部署到内网运行。