java线上gc巡检核心是“看趋势、抓异常、查根源”,需确保日志开启完整,每日扫描full gc频率/暂停时间/gc吞吐量/老年代增长等指标,定位cms/g1典型异常,建立基线并自动化监控告警。

Java 线上服务 GC 日志巡检,核心是「看趋势、抓异常、查根源」——不是每天数一遍 Full GC 次数,而是建立可回溯的基线,快速识别偏离常态的行为。
一、确认 GC 日志是否开启且完整
没日志,一切巡检都是空谈。线上必须开启详细 GC 日志,并确保落盘可靠:
- 推荐 JVM 参数(JDK 8/11 兼容):
-Xloggc:/path/to/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
(JDK 9+ 可用-Xlog:gc*:file=/path/to/gc.log:time,tags,level:filecount=10,filesize=100M) - 检查日志文件是否真实写入:用
tail -f gc.log观察是否有新日志滚动;ls -lt看文件更新时间是否连续 - 警惕「日志被重定向丢弃」或「磁盘满导致写入失败」——需配合监控(如 inotify 或日志采集 agent 的健康状态)
二、每日/每小时快速扫描关键指标
不逐行读日志,用脚本或命令提取高频信号:
-
Full GC 频率:1 小时内 ≥1 次 → 高风险;24 小时内 ≥5 次 → 必须介入
示例命令:grep "Full GC" gc.log | grep "$(date -d '1 hour ago' '+%Y-%m-%d %H')" | wc -l - 单次 Full GC 暂停时间:>1s(CMS)或 >2s(G1)需关注;>5s 基本判定为 STW 异常
-
GC 吞吐量下降:计算
(总运行时间 - GC 时间) / 总运行时间,低于 95% 说明 GC 开销过大
可用awk '/GC pause/ {sum += $6} END {print sum}' gc.log(单位 ms)粗略估算 GC 总耗时 - 老年代持续增长无回收:观察多次 Minor GC 后老年代使用量是否阶梯上升(非缓慢爬升),暗示内存泄漏或晋升过快
三、定位典型异常模式
发现异常后,结合日志上下文快速归因:
-
频繁 CMS Failure / Concurrent Mode Failure:说明老年代碎片化或并发收集跟不上分配速度
→ 查看concurrent mode failure或promotion failed关键字;调优方向:增大老年代、调小-XX:CMSInitiatingOccupancyFraction、启用-XX:+UseCMSInitiatingOccupancyOnly -
G1 出现大量 Evacuation Failure 或 To-space Exhausted:说明 Humongous 对象过多或 Region 回收不及时
→ 检查Humongous Allocation日志;考虑调大-XX:G1HeapRegionSize或减少大对象创建 -
Minor GC 后老年代陡增:可能是 Survivor 区太小(
-XX:SurvivorRatio过大)或对象年龄阈值(-XX:MaxTenuringThreshold)设得太低,导致提前晋升 - GC 日志中出现 OutOfMemoryError 前兆:如连续多次 Full GC 后老年代仍 >95%,或 Metaspace 使用率持续 >90%(JDK 8+)
四、建立基线与自动化辅助
人工巡检易遗漏,需沉淀规律:
- 用 Prometheus + Grafana 抓取 GC 指标(通过 JMX 或 Micrometer),绘制「Full GC 次数/小时」「平均 GC Pause 时间」「老年代使用率趋势」三图,设置动态基线告警(如同比昨日同一时段上涨 300%)
- 定期(如每周)用
gceasy.io或GCViewer分析一周 GC 日志,生成报告:重点关注「GC 时间占比变化」「各代回收效率」「最大暂停时间分布」 - 将常见异常关键词(如
Allocation Failure、to-space exhausted、concurrent mode interrupted)加入日志采集规则,触发企业微信/钉钉告警
GC 巡检不是故障发生后的救火,而是让问题在影响用户前浮出水面。重点不在“有没有 GC”,而在“GC 是否按预期工作”。保持日志可用、指标可比、异常可溯,就能把大部分内存问题挡在上线后 24 小时之外。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











