原因 → 直接现象 → 最终后果 → 排查工具 → 易混淆项
| 分类 | 原因 | 直接现象 | 连锁反应 | 最终后果 | 排查工具 | 易混淆 |
|---|---|---|---|---|---|---|
| 💻代码 | 死循环(while无出口) | 单核CPU 100% | 线程池占满 | 服务假死 | jstack | vs死锁:死循环"忙死"CPU满,死锁"等死"CPU空 |
| 💻代码 | 死递归(无终止) | 栈帧叠加 | 超出栈深度 | StackOverflowError | 异常堆栈 | vs OOM:死递归是栈溢出(内存不涨),OOM是堆溢出 |
| 💻代码 | 大对象(查50万行) | 堆瞬间撑大+FullGC | FullGC救不回 | OOM崩溃(瞬时) | jmap+MAT | vs泄漏:大对象瞬时撑爆,泄漏慢慢涨 |
| 💻代码 | 内存泄漏(只增不减) | 内存阶梯式涨 | 后期频繁FullGC | 几天后OOM | jmap+MAT | vs大对象:看曲线,泄漏像楼梯,大对象像尖峰 |
| ☕JVM | FullGC频繁(老年代满) | 整体CPU偏高(非单核) | 每次FGC触发STW | 接口周期卡顿 | jstat | vs死循环:FullGC整体偏高+周期卡,死循环单核100% |
| ☕JVM | OOM(堆满+GC放弃) | 堆100%回收不动 | OutOfMemoryError | 进程退出,服务挂 | HeapDump | vs FullGC:FullGC还活着(回收得动),OOM挂了 |
| ☕JVM | 死锁(互等对方锁) | CPU不高(都在等) | 线程数飙升 | 请求全超时 | jstack搜deadlock | vs死循环:死循环CPU满忙死,死锁CPU空闲等死 |
| 🌐系统 | 磁盘满(100%) | No space刷屏 | 日志/DB/MQ全写不了 | 服务局部瘫痪 | df/du/lsof | 陷阱:rm正在写入的文件空间不释放 |
| 🌐系统 | CPU飙高 | CPU/load飙升 | 所有请求变慢 | 超时/级联 | top -Hp+jstack | 分根因:单核满=死循环;多核+GC=FullGC;多核+业务=计算密集 |
| 🌐系统 | 网络超时/雪崩 | 调用方线程卡等 | 线程池满+用户重试 | 级联全链路崩 | 链路追踪 | 根因不是下游挂,是自己没超时/熔断 |