简体中文
常见问题
如何开启 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 无伤大雅;反复出现说明老年代压力过大——要么加大堆,要么找出泄漏。
分析器发现了内存泄漏,接下来怎么办?
- 在压力场景下复现,并抓取堆转储(
-XX:+HeapDumpOnOutOfMemoryError或jmap)。 - 用堆转储分析工具(HeapHero、Eclipse MAT)分析支配树。
- 优先排查缓存、
ThreadLocal、静态集合和监听器注册——这些是惯犯。
离线能用吗?
能——页面加载后全部在本地运行。也可以将静态构建产物部署到内网运行。