JVM GC 日志里 Concurrent Mark 耗时过长怎么排查

陌墨酱_1294

陌墨酱_1294

2026-09-20

562人浏览

原创

concurrent mark 耗时过长会延长 gc 总耗时、增大内存压力并可能引发 concurrent mode failure 从而触发 full gc,需从对象图规模、堆结构、gc 参数和系统资源四方面排查。

jvm gc 日志里 concurrent mark 耗时过长怎么排查

Concurrent Mark 耗时过长,说明并发标记阶段拖慢了整个 GC 周期,虽然不造成 STW,但会延长 GC 总耗时、增加内存压力,甚至诱发 concurrent mode failure(并发模式失败),最终触发 Full GC。排查需从对象图规模、堆结构、GC 参数和系统资源四方面入手。

看日志确认是否真“过长”

先区分是单次耗时异常,还是持续偏高:

  • 对比基线:ZGC/G1 的 Concurrent Mark 通常应控制在几百毫秒内;CMS 的 concurrent-mark 阶段若 >1s,就值得警惕
  • 查日志关键词:CMS-concurrent-mark(CMS)、Concurrent Mark(G1)、Concurrent Mark(ZGC 中对应 Concurrent Mark 阶段,非 Pause)
  • 注意时间单位:日志中如 [CMS-concurrent-mark: 0.340/0.340 secs],前者是用户态耗时,后者是真实耗时;若 real time 显著大于 user time,可能受 CPU 或内存带宽争抢影响

检查老年代对象图是否过大或太深

Concurrent Mark 的工作量取决于从 GC Roots 可达的老年代活跃对象数量与引用链深度:

  • 对象存活率高:用 jstat -gc <pid></pid> 查看 O(老年代使用率)长期 >75%,说明大量对象晋升且未被回收
  • 存在大缓存或长生命周期对象:比如静态 Map 缓存了上万条业务数据、未清理的监听器、未关闭的连接池引用等
  • 引用关系复杂:如对象图存在多层嵌套、循环引用(虽不影响可达性判定,但增加遍历开销)或大量弱/软引用待处理

排查 CMS/G1/ZGC 各自的典型诱因

不同收集器机制不同,原因有差异:

  • CMS:Concurrent Mark 阶段依赖初始标记(CMS-initial-mark)结果;若初始标记遗漏太多对象(如 Survivor 晋升激增),后续并发标记负担加重;也常见于 -XX:CMSInitiatingOccupancyFraction 设置过低,导致过早启动并发周期
  • G1:Concurrent Mark 启动时机由堆占用率触发;若 Region 碎片化严重、Remembered Set(RSet)过大,标记过程需频繁跨 Region 查找,拖慢速度
  • ZGC:Concurrent Mark 是纯并发阶段,但若堆极大(>100GB)且活跃对象超亿级,或启用 -XX:+ZVerifyViews 等调试选项,也会明显拉长耗时

验证系统资源与配置是否受限

并发标记虽不 STW,但仍消耗 CPU 和内存带宽:

  • CPU 不足:标记线程数默认为 CPU 核心数 × 0.6(G1/ZGC);可通过 -XX:ParallelGCThreads-XX:ConcGCThreads 适当调高(但不宜超过物理核数)
  • 发生 swap:用 free -hvmstat 1 观察 si/so 列;swap 会导致内存访问延迟飙升,直接拖垮并发标记吞吐
  • 元空间或直接内存干扰:Metaspace 持续增长(类加载泄漏)会间接增加 GC Roots 数量;DirectByteBuffer 过多也会扩大扫描范围
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

0

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

180

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

80

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

60

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

380

28

GDB怎么查看变量值
GDB怎么查看变量值

本专题介绍GDB调试过程中查看变量值的具体方法,涵盖局部变量、函数参数、数组、结构体和指针内容查询,同时整理变量持续显示、格式化输出及无法读取变量时的排查思路。

2026.09.11

120

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133万人学习