直接用gcviewer或gceasy分析gc日志,重点看健康分、gc停顿图、老年代内存曲线及建议;jdk8前用-xx:+printgcdetails,jdk9+必须用-xlog:gc*;人工识别allocation failure频次、promotion failed等关键信号。

直接打开 GC 日志文件,用 GCViewer 或上传到 GCEasy,就能看到图形化报告和关键问题提示。核心不是学工具操作,而是知道看什么、为什么这么看。
怎么选工具:在线还是本地?
- 临时诊断、没安装权限、想快速出结论 → 用 GCEasy(https://www.php.cn/link/c9571bae638b1e00f6ce64325c44c285)
- 优点:免安装、支持 JDK 8–22、自动标健康分、带中文建议
- 注意:日志要单个文件、≤100MB、不能是轮转后的多个 gc.log.0、gc.log.1
- 长期分析、需对比多组日志、要导出数据或离线使用 → 用 GCViewer
- 下载地址:https://www.php.cn/link/a98940cb04d0359f9e42426587225057
- 启动后拖入 gc.log 即可加载,界面分图表区、事件列表、数据面板三块
日志必须先配对,否则工具“读不懂”
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- JDK 8 及之前:启动参数加
-
-XX:+PrintGCDetails -
-XX:+PrintGCTimeStamps或-XX:+PrintGCDateStamps -
-Xloggc:/path/to/gc.log
-
- JDK 9 及以后(含 JDK 22.0.2):必须用统一日志框架
-
-Xlog:gc*:file=/path/to/gc.log:time,uptime,pid,tags - 不要混用
-XX:+PrintGCDetails,它在 JDK 11+ 已被忽略
-
上传/加载后,3 分钟内锁定重点
- 先看 Health Score(健康分):低于 70 分就点“View Details”,看扣分项是 Full GC 频繁、停顿过长,还是老年代不释放
- 再盯 GC Pauses 图表:找最高那根绿柱子,双击跳转原始日志行,确认是 Young GC 还是 Full GC,耗时是否超 200ms
- 接着翻 Memory 标签页:看 Old Gen 曲线是不是阶梯式上升(每次 Full GC 后不回落),这是内存泄漏的强信号
- 最后扫 Recommendations(建议页):GCEasy 给的“Consider switching to G1GC”或“Increase heap size”要结合你的 JDK 版本和业务延迟要求判断是否采纳
人工扫日志时,5 秒识别瓶颈信号
-
Allocation Failure出现太密(比如每秒多次)→ Eden 太小或对象分配太快 -
Promotion Failed或Concurrent Mode Failure→ 老年代没空间收晋升对象,大概率触发 Full GC -
Full GC行间隔从小时级缩到分钟级 → 回收能力已严重不足 -
[PSYoungGen: 1200M->1150M]这类回收量极低的记录反复出现 → 存活对象太多,Survivor 区装不下,大量晋升
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










