当前位置:首页 > 文章列表 > 文章 > java教程 > G1 GC 暂停飙升排查:别先复制 JVM 参数,先看 JFR 和 GC 日志

G1 GC 暂停飙升排查:别先复制 JVM 参数,先看 JFR 和 GC 日志

来源:17golang Java频道原创 2026-06-04 14:11:24 0浏览 收藏

这篇写一个 Java 线上性能排查里最容易被“玄学参数”带偏的问题:接口 p99 突然出现尖刺,GC 日志里 G1 Pause 从几十毫秒变成两三百毫秒。很多人第一反应是去网上复制一串 JVM 参数,但真正有效的顺序应该是先拿证据,再小步调优。

本文适用于 Java 17/21、Spring Boot 服务和默认使用 G1 GC 的常见后端应用。资料只用于核对事实:G1 的暂停目标是软目标,官方也建议先从默认设置、最大堆和 GC 日志/JFR 证据出发。正文按生产复盘写,不搬调参清单。

G1 GC 暂停排查思维导图
脑图:GC 排查从现象、证据、根因、修复和上线闭环展开。

业务场景:支付回调 p99 每隔几分钟尖一下

支付回调服务平时延迟很稳,某次活动后 p99 每隔几分钟就抬到 800ms。CPU 没满,数据库也没慢,但 GC 日志显示年轻代暂停明显变长,JFR 里还能看到大对象分配增多。

这类问题最怕只看平均值。平均耗时可能还行,但用户感受到的是尖刺。我们要把业务 p99、GC pause、堆占用、分配速率放到同一条时间线上看。

问题复现:批量查询加 JSON 序列化放大分配

最小复现是一个批量接口:一次查 2000 条订单,再把整批对象组装成大 JSON 返回。低峰没问题,高峰时 Eden 很快被填满,大对象还可能进入 humongous region,G1 为了回收和整理会产生更明显的暂停。

参数不是没有用,但如果业务代码持续制造大量短命对象和大对象,单靠 MaxGCPauseMillis 很难从根上解决问题。

G1 GC 暂停诊断流程
流程图:先对齐现象,再用 GC 日志和 JFR 找分配源。

踩坑原因:把暂停目标当硬指标

-XX:MaxGCPauseMillis 是目标,不是保证。目标设得太激进,G1 会尝试缩短暂停,但吞吐、并发回收压力和堆空间都会受影响。业务分配模式不变,暂停可能换一种方式继续出现。

我见过最危险的做法,是把一堆看不懂的 G1 参数复制到生产:新生代比例、IHOP、保留百分比、并发线程全改。短期似乎好了,下一次流量形态变化又出新问题,而且没人知道哪个参数起了作用。

代码案例:先打开可观测,再谈调参

下面这张图不是说参数永远不能调,而是建议先保留证据。没有 GC 日志、没有 JFR、没有分配来源,调参就是盲飞。

G1 GC JVM 参数对比
先观测,再少量调优;每次只改少数参数,并做灰度对比。
JAVA_OPTS="
  -Xms4g -Xmx4g
  -Xlog:gc*,safepoint:file=/logs/gc-%t.log:time,level,tags:filecount=10,filesize=50M
  -XX:MaxGCPauseMillis=200
  -XX:+HeapDumpOnOutOfMemoryError
  -XX:HeapDumpPath=/logs/heapdump.hprof
"

如果 JFR 显示分配集中在某个 JSON 转换、批量列表、缓存复制或日志拼接,优先改代码:分页、流式处理、减少中间对象、复用缓冲、限制响应大小。这些通常比把暂停目标从 200ms 改成 50ms 更靠谱。

诊断步骤:我会按这六步走

第一步,对齐时间线。 把接口 p99、GC pause、CPU、堆占用、分配速率放在同一张图,不要只看单点日志。

第二步,打开 GC 日志。 看 young pause、mixed GC、humongous allocation、to-space exhausted、remark/cleanup 等关键信息。

第三步,抓 JFR。 重点看 GC Pause、Allocation in new TLAB/outside TLAB、Object Count、Socket/Thread Park 等事件。

第四步,找大对象和高频分配。 批量查询、一次性 JSON、图片/报表、日志拼接、大 Map 缓存都要重点查。

第五步,先改业务分配。 降低单请求对象量,拆批处理,限制列表大小,避免把大对象放进缓存。

第六步,再灰度参数。 每次只改少数参数,保留改前改后 GC 日志和业务指标。

上线检查:别让调参变成新风险

  • 确认 -Xms-Xmx 与容器内存限制匹配,避免 OOMKill。
  • 确认 GC 日志滚动配置,别把磁盘写满。
  • 确认 p95/p99、GC pause、分配速率、Old 区占用都有告警。
  • 确认每次参数变更都有灰度和回滚方案。
  • 确认代码层面的分配优化已经验证,不把所有压力甩给 GC。

我的经验总结

G1 GC 很强,但它不是魔法。暂停变长时,先问业务最近是不是分配更多对象、响应更大、缓存更重、批处理更猛。GC 往往只是把应用的对象分配习惯暴露出来。

我的建议很简单:默认参数起步,日志和 JFR 先行,代码降分配优先,参数小步灰度。Java 生产优化最怕一把梭,最稳的是每一步都有证据。

版本声明
本文转载于:17golang Java频道原创 如有侵犯,请联系study_golang@163.com删除
Go singleflight 实战:别让缓存击穿打爆下游服务Go singleflight 实战:别让缓存击穿打爆下游服务
上一篇
Go singleflight 实战:别让缓存击穿打爆下游服务
MySQL 8.4 复制延迟排障:别只盯 Seconds_Behind_Source
下一篇
MySQL 8.4 复制延迟排障:别只盯 Seconds_Behind_Source
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    2109次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    1956次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    1896次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    2100次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    2089次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码