线上问题实战录 · 系列目录

叙事框架:现象 → 排查过程 → 根因 → 修复 → 预防 总计 58 篇,已发布 15 篇,43 篇待完善


一、CPU 飙高类

二、OOM / 内存泄漏类

三、FullGC / GC 问题类

  • ⏳ 一次诡异的 Safepoint 机制导致应用无响应
  • ⏳ GC 选型事故:Parallel Scavenge 在高并发下暂停时间失控
  • ⏳ G1 Humongous Allocation 导致 GC 频繁 Full
  • ⏳ User 线程加锁导致 VM 线程 Safepoint 超时——JT 与 GC 耦合排查

四、接口慢 / 延迟飙高类

  • ⏳ 接口突然慢了 20 倍,从 JFR 火焰图到一行代码的修复
  • ⏳ p99 飙升但 avg 正常?长尾请求根因定位方法论
  • ⏳ 一次外部依赖超时引发的线程池饥饿级联故障

五、线程 / 线程池问题类

  • ⏳ 线程池拒绝策略触发后业务补偿逻辑缺陷导致数据不一致
  • ⏳ 线程池满了?拒绝策略选型失误导致任务丢失
  • ⏳ ForkJoinPool 在工作窃取模式下任务分配不均问题
  • ⏳ Tomcat 最大线程数设大了:请求排队过多导致内存暴涨

六、死锁 / 锁问题类

  • ⏳ 数据库连接池内部死锁导致应用雪崩
  • ⏳ 读写锁降级导致的死锁——ReadWriteLock 写锁饥饿
  • ⏳ StampedLock 在乐观读模式下的数据不一致
  • ⏳ 数据库行锁升级表锁的生产事故排查
  • ⏳ 多个线程同时 INSERT ON DUPLICATE KEY UPDATE 引发的死锁
  • ⏳ 数据库连接池连接泄漏导致连接数打满

七、网络连接类

  • ⏳ 客户端报连接超时、服务端说没收到——TCP 握手丢包分析
  • ⏳ HTTP 连接池超时设置不当导致连接复用冲突
  • ⏳ 四层 SLB 连接空闲超时导致客户端与服务端状态不一致
  • ⏳ DNS 解析异常导致服务发现失败

八、日志风暴类

  • ⏳ 日志打印太多打挂应用?一次日志风暴的根因定位
  • ⏳ 日志框架配置冲突导致磁盘写满
  • ⏳ 日志异步写入器瓶颈引发的服务线程阻塞

九、磁盘 / 存储类

  • ⏳ 文件描述符泄漏导致日志轮转失效
  • ⏳ 磁盘 IO 打满导致接口响应极慢分析
  • ⏳ 日志轮转失效导致磁盘爆满

十、配置 / 类加载类

  • ⏳ 配置热更新未生效——Spring Cloud Config 刷新机制排查
  • ⏳ 线上小版本升级总能引入诡异类冲突——类加载器视角排查
  • ⏳ YAML 多环境配置覆盖顺序导致的意外行为
  • ⏳ 自定义 Starter 自动配置条件判断失误导致 Bean 不加载

十一、压测类

  • ⏳ 双十一全链路压测,从 Perf 火焰图发现框架级 Bug
  • ⏳ 压测时 TPS 上不去,如何分层定位瓶颈?

十二、进程异常类

  • ⏳ 容器 CPU Throttling 导致健康检查超时引发滚动重启
  • ⏳ cgroup 内存限制与 JVM 内存感知不一致导致的容器 OOM
  • ⏳ 应用突然无响应但进程还在——一次 JVM 长时间停顿排查

十三、混合 / 全链路类

  • ⏳ "一个请求的一生":从 DNS 到 DB 全路径排查一次接口超时
  • ⏳ 微服务调用链路超时:从网关到下游的全链路追查
  • ⏳ 线上徒手撕 Bug:没有 Arthas 的年代怎么在线 Debug

最后更新:2026-06