全链路追踪系统能发现的问题点总结
本文适用于搭建了 ARMS + SLS + Grafana 的同学,也适用于准备高级/资深后端工程师面试时对系统稳定性、性能问题的复盘与总结。
一、系统资源类问题
| 问题类型 | 可观测指标 | 示例信号 |
|---|
| CPU 飙升 | CPU 使用率、线程占用 | CPU > 90%,单线程长期 100% |
| 内存飙升 | Heap、OldGen、DirectMemory | OldGen 持续上涨,GC 后未回收 |
| Full GC 频繁 | GC 次数、频率、暂停时间 | Full GC 时间 > 500ms 且频繁出现 |
| 线程数飙升 | 活跃线程数、阻塞线程数 | Thread Live 激增,线程池打满 |
| 磁盘空间异常 | 日志大小、分区占用 | 日志暴增,磁盘写满报警 |
二、服务性能类问题
| 问题类型 | 可观测指标 | 示例信号 |
|---|
| 接口响应变慢 | 平均响应时间(RT)、P99 | RT 翻倍,调用链路径异常变长 |
| QPS 下降 | 请求量、吞吐趋势图 | QPS 骤降,服务实例存活数变 0 |
| 慢调用链 | trace 分析 | 某子服务响应耗时占主链路 80% |
| 异常数量飙升 | SLS 日志中异常计数 | 错误堆栈重复,5xx 突然暴增 |
| 服务不可用 | 健康检查失败 | 实例频繁重启,健康探针失败 |
三、接口异常类问题
| 问题类型 | 可观测指标 | 示例信号 |
|---|
| 接口超时 | 超时请求数量、trace 报错 | trace 出现 TimeoutException |
| 接口失败率高 | 失败率(5xx、4xx) | 接口调用成功率 < 90% |
| 缓存穿透 | Redis 命中率下降,后端 QPS 上升 | Redis 命中率 < 50%,DB QPS 暴涨 |
| 数据库慢 SQL | SQL 执行耗时、慢查询日志 | 单条 SQL > 1s,执行频繁 |
四、依赖服务异常类问题
| 问题类型 | 可观测指标 | 示例信号 |
|---|
| MQ 消费积压 | Kafka lag、消费速率 | Lag 越来越大,消费线程阻塞 |
| Redis 异常 | 请求失败数、响应时间 | Redis 超时或连接失败日志频繁出现 |
| MySQL 连接耗尽 | 活跃连接数、连接池配置 | 活跃连接 = 最大连接数,线程阻塞等待连接 |
| 外部依赖超时 | 调用链 trace 监控 | 外部 API 耗时持续上升或错误率升高 |
五、容量与限流问题
| 问题类型 | 可观测指标 | 示例信号 |
|---|
| 线程池满 | 活跃线程数 > 最大线程数,拒绝次数 | RejectedExecutionException 频繁出现 |
| 队列堆积 | 队列长度、等待时间 | 消费不及时,任务积压严重 |
| 限流异常 | 限流命中次数、Sentinel 报警 | 限流 QPS 频繁触发,访问失败率上升 |
六、业务维度异常问题
| 问题类型 | 可观测指标 | 示例信号 |
|---|
| 转化率异常 | CTR、CVR 趋势 | 曝光正常但转化率断崖式下降 |
| 下单量骤降 | 下单数、支付成功数 | 活跃用户正常但 GMV 掉线 |
| 用户量异常 | UV、活跃用户、请求数 | 某渠道用户量突然归零或增长异常 |
| 日志异常激增 | 错误关键词、堆栈关键字 | SLS 错误日志关键字(如 NullPointer)爆发 |
七、系统高可用相关问题
| 问题类型 | 可观测指标 | 示例信号 |
|---|
| 单点故障 | 实例数变化、服务发现异常 | 节点下线,服务失效,路由失败 |
| 服务雪崩 | Trace 路径级联超时、错误放大 | 某接口失败导致整个链路阻塞 |
| 健康检查失败 | 健康探针状态码异常 | /health 接口持续 500 |
| 灾备失效 | 主备切换耗时、跨可用区超时 | 可用区故障时,服务不可达 |
| 无限重试 | 重试次数、异常日志关键词 | 请求重试引发放大流量(如 Retry Storm) |
| 配置错误发布 | 部署成功但日志报错、QPS 异常下降 | 发布后 CPU 飙升、服务挂掉 |
示例场景复盘:如何快速定位系统问题?
场景一:CPU 飙升
- 指标:node_exporter + jstack 线程 dump
- 动作:通过 jstack 定位热点方法栈(死循环、热代码)
场景二:Full GC 频繁
- 指标:GC 日志 + OldGen 持续上涨
- 动作:导出 heap dump,MAT 分析内存泄露对象
场景三:接口 RT 激增
- 指标:ARMS 链路追踪 + Trace drill down
- 动作:分析具体 traceId 所在链路,聚焦慢节点
场景四:数据库连接耗尽
- 指标:连接数、连接池等待时间
- 动作:分析慢 SQL,扩大连接池或添加限流
可用于面试的答题模板
"我们系统基于 ARMS + SLS + Grafana 搭建了全链路监控能力,对 JVM 内存、线程池、GC、依赖服务调用都有完整指标跟踪。有一次线上 Full GC 频繁,我们用 GC 日志结合 Grafana 观察到 OldGen 占用异常,dump 堆后定位是连接池未释放导致的对象泄露,最终通过关闭自动重连和设置连接最大生命周期解决。"
如需更进一步学习:可以关注系统链路追踪、接口异常链路分层设计、SLO 指标落地实践。