【每日一题】压测时 TP99 周期性毛刺,怎么定位(答题要点)

题目:压测中平均 RT 很稳,但 TP99/TP999 每隔几分钟出现一次规律性尖刺,吞吐同步掉坑。面试官问:你怎么定位?说说思路和可能原因。

难度:高级
题型:面试口述题

:point_right:参考答案/答题要点:

口述按「先定位层,再找周期性来源,最后验证」三段说:

  1. 先量形态:毛刺间隔多久、持续多久、是否整点/半点触发。规律周期(5 分钟、1 分钟)几乎都指向定时任务、GC、监控采集、缓存批量过期,而不是随机流量抖动。
  2. 分层拆 RT:网关/LB、应用、缓存、DB、下游依赖分别打耗时埋点,同一时间轴对齐曲线,先看尖刺发生在哪一层(只有 DB 层抖→DB;应用层抖但下游不抖→进程内)。
  3. 对齐事件日志:GC 日志(Full GC / STW 停顿时长)、日志切割与压缩、cron 定时任务、配置中心推送、监控 agent 抓取、容器健康检查、发布或弹性扩缩容。JVM 场景用 jstat/GC viewer 或 async-profiler 火焰图对尖刺时间点采样。
  4. 资源侧检查:连接池是否瞬时打满(获取连接等待)、线程池队列堆积、磁盘 IO 抖动与云盘限流、CPU 被 sidecar 抢占、网络重传率。
  5. 数据与缓存:缓存集中过期导致击穿、热点 key 重建、大 key 扫描、DB 主从延迟、备份/统计任务、慢查询、缓冲池刷脏页。
  6. 压测端自身:被测端 JVM 停顿、压测机 CPU 打满、长连接复用不足、日志同步写、JMeter 监听器太重——先排除"自己把系统压出问题"。
  7. 验证与闭环:单变量复现(摘掉某个定时任务/关掉某缓存重跑同基线)、单机与集群对比;给出优化方案(GC 参数或换 ZGC、错峰、缓存 TTL 加随机抖动、连接池扩容、慢 SQL 改写),并用同一模型回归,对比优化前后 TP99 曲线。

一句话收口:毛刺排查的核心是时间轴对齐 + 分层归因,不看平均值只看分位数的变化形状。