news 2026/8/25 11:30:08

线上GC如何排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线上GC如何排查

摘要

排查思路是“先在线定性,再离线定量”。

先用 jstat 定性,再用 jmap -histo 定位嫌疑对象,最后用 jcmd 精准 Dump。

永远不在生产环境执行 jmap -dump:live 或 jmap -histo:live,因为它们会强制触发 Full GC,在高并发场景下等同于自杀。

尤其是在云原生 + Pod 环境下,堆转储(Dump)本身耗时长、文件巨大、难以拉取,所以它绝不是首选工具。

第一步:快速定性——先用 jstat 看整体态势

先用 jstat -gcutil <PID> 1000 10

看两个核心指标:

· FGC 频率:如果 FGC 频繁且耗时飙升,说明老年代已满,可能存在内存泄漏或大对象直接晋升
· YGC 频率:如果 YGC 每分钟几十次,说明年轻代过小或对象分配过快

通过这个快速定性,就能判断是“突发流量导致”还是“慢泄漏”,从而决定下一步动作。

第二步:在线取证——用 jmap -histo 锁定嫌疑对象

接下来,我会执行 jmap -histo <PID> | head -20(不带 :live,避免触发 GC)。这是一个低风险、秒级返回的操作,能直接告诉我们堆里数量最多、占用最大的是哪类对象。

这一步的价值在于:不需要 Dump 就能锁定 80% 的问题。

第三步:精准深挖——用 jcmd 抓 Dump 做离线分析(决策点)

什么情况下才去抓 Dump?

只有在直方图已经锁定某个类,但看不清引用链,才去抓快照。

此时我选用 jcmd <PID> GC.heap_dump,而非 jmap。原因是:jcmd对在线业务的影响更小,且在堆内存 >8G 时,STW 时间显著低于 jmap。

如果线上堆占用已经飙到 90% 以上,建议直接抓完快照立即重启应用“止血”,再离线用 MAT 分析。

第四步:临时止血(如果来不及分析)

如果 Full GC 已经让系统濒临崩溃,修复代码来不及,我会做两件事先止血:

· 增大年轻代(如堆16G时,将 -Xmn 从4G调到8G),减少 YGC 频率,给对象分配腾出更多空间。
· 切换 GC 器,从 CMS 切到 G1,并设置 -XX:MaxGCPauseMillis=50。G1 能自动处理大对象(Humongous Region),避免大对象直接晋升老年代。

第五步:根因治理(代码层面)

当 Dump 分析锁定根因后,我会从代码层面进行治理。比如,如果是某个 SQL 查询导致的大对象,我会改为分批次查询,避免 ResultSet 一次性拉取全部数据到内存。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 11:27:00

计算机智能体安全:揭秘“隐形墨水”攻击与防御实战

1. 项目概述&#xff1a;当“隐形墨水”潜入你的智能助手想象一下&#xff0c;你让一个AI助手帮你整理一份会议纪要&#xff0c;它高效地完成了任务&#xff0c;但与此同时&#xff0c;它可能已经悄无声息地在你电脑的某个角落&#xff0c;下载并执行了一个恶意脚本。这个脚本并…

作者头像 李华
网站建设 2026/8/25 11:24:23

Windows服务器等保2级加固实战:从账户策略到日志审计的完整指南

1. 项目概述&#xff1a;为什么Windows服务器加固是门必修课&#xff1f;最近在帮一个客户做合规审计&#xff0c;他们的业务系统跑在几台Windows Server上&#xff0c;目标是过等保2级。说实话&#xff0c;一开始他们觉得“加固”就是装个杀毒软件、改个密码的事儿。但等我们真…

作者头像 李华
网站建设 2026/8/25 11:22:42

ResponsibleRobotBench: Benchmarking Responsible Robot Manipulation using Multi-modal Large Langua...

一、文章主要内容总结 该研究针对多模态大模型(LMMs)驱动的机器人操作在现实场景中缺乏可靠性和安全性的问题,提出了ResponsibleRobotBench基准测试平台,核心目标是评估和推动负责任的机器人操作技术发展,涵盖从仿真到现实世界的全流程验证。 1. 核心背景与问题 现有LMM…

作者头像 李华
网站建设 2026/8/25 11:16:45

Java SE 部分总

Java内存模型(JMM)Java虚拟机规范中定义了Java内存模型. ⽬的是屏蔽掉各种硬件和操作系统的内存访问差异&#xff0c;以实现让Java程序在各种平台下都能达到⼀致的 并发效果.数据类型在Java中数据类型主要分为两类&#xff1a;基本数据类型和引⽤数据类型。 基本数据类型有四类…

作者头像 李华
网站建设 2026/8/25 11:16:32

基于Agentic AI与离散事件仿真的门诊智能调度系统设计与评估

1. 项目概述&#xff1a;当AI成为门诊的“智能调度官”最近和几位在医院信息科和门诊部工作的朋友聊天&#xff0c;大家吐槽最多的就是“排队”。尤其是在大型三甲医院的门诊&#xff0c;患者从挂号、候诊、检查到取药&#xff0c;每个环节都可能排起长龙。这不仅让患者体验极差…

作者头像 李华
网站建设 2026/8/25 11:13:42

OpenHarmony 环境搭建(华子内部开发)

1. 安装 WSL2 通常情况下&#xff0c;我们在 Linux 环境中开发 OpenHarmony 代码。你可以在 Windows 子系统 Linux&#xff08;WSL&#xff09;上搭建开发环境。推荐使用运行在 WSL2 上的 Ubuntu 22.04 LTS 版本&#xff0c;使用其他 Ubuntu 版本可能会出现不可预见的问题。 参…

作者头像 李华