当前位置:首页 > 文章列表 > 文章 > 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推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    5972次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    6389次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    6202次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    8176次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    6784次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码