← 每日面试题 学习看板

数据倾斜导致的频繁FullGC问题排查

面试题/01实践场景题/问题排查/数据倾斜导致的频繁FullGC问题排查.md

面试记录 2026-10-16

题目:数据倾斜导致的频繁FullGC问题排查

难度:high

标签:practice/debug, network/debug, jvm/gc, difficulty/high

评分:⭐⭐☆☆☆(2/5)

我的回答

数据倾斜下导致频繁fgc,需要首先查看下是否是流量倾斜,是否是有热点内容访问到某一台机器,导致请求都倾斜到一台服务上;

前置应该是发现了一组集群中某一台机器出现频繁fgc,然后可以先查看服务器负载的看板,看是否是请求流量发生倾斜,如果是请求流量出现的倾斜,那么需要调整前置的负载均衡算法,将流量平均下;

如果流量层没有问题,但是某台机器出现频繁fgc,那么使用jmap或者arthas导出服务的内存快照,使用jstack导出线程快照,检查下内存对象分配的情况;

确认具体是什么样的原因导致的频繁fgc;定位到具体的方法,和内容;然后对应进行分析处理

点评

优点:

不足:

补充:GC 排查五步标准路径——监控告警 → GC 日志分析 → 线程 dump → profiler 热点 → heap dump 分析。

完整讲解

第一部分:知识重点剖析

核心考点定位:考察 GC 排查的完整工具链(GC 日志 + heap dump + profiler)和标准排查路径。

知识点拆解:

  1. GC 排查五步标准路径:
  1. 数据倾斜导致 FullGC 的根因:
  1. 修复方案:

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. 如何分析 GC 日志?
  1. MAT 如何分析 heap dump?
  1. 数据倾斜如何导致 FullGC?

第三部分:面试者参考回答(三步法口语化,300-400 字)

【一句话结论】

面试官您好,GC 排查五步标准路径——监控告警 → GC 日志分析 → 线程 dump → profiler 热点 → heap dump 分析。

【三点展开】

第一,Step1 监控告警:CPU > 60% 预警、FullGC > 1 次/小时告警、STW > 500ms 严重、BLOCKED > 50 线程、堆使用率 > 80%。先确认是不是流量倾斜(热点内容导致单台机器压力),如果是调整负载均衡算法。

第二,Step2-3 GC 日志 + 线程 dump:-Xlog:gc*:file=gc.log 看 pause time/heap usage 趋势,jstat -gc <pid> 1000 看 GC 频率,jstat -gccause <pid> 看 GC 原因。jstack <pid> 看线程状态,BLOCKED 线程卡在哪个 synchronized,RUNNABLE 线程在做什么是 CPU 飙高主因。

第三,Step4-5 profiler + heap dump:async-profiler/arthas profiler start --event cpu 看热点方法火焰图,定位循环内频繁创建大对象。jmap -dump:live,format=b,file=heap.hprof <pid> 导出堆快照,MAT Dominator Tree 看大对象,泄漏报告定位内存泄漏。

【一句边界】

当然,排查要形成标准路径,不要凭直觉。流量倾斜先调整负载均衡,内存泄漏要修复代码(不是增大堆内存),大对象频繁创建要对象池化。预警机制要提前设置(CPU > 60% 预警、FullGC > 1 次/小时告警),避免线上事故。