首页/数据/Redis 进阶速查/延迟来源分层总图
性能与排障129 条

延迟来源分层总图

延迟分层:网络往返、客户端排队、服务端排队(单线程等待)、命令执行、后台任务干扰、系统资源(CPU/内存/磁盘);每层都有对应证据工具。

Redis 进阶速查数据更新于 2026-10-13

延迟排查的分层地图

定位 Redis 延迟问题的第一步是分层:客户端到服务端的网络往返、客户端连接池排队、服务端单线程前的请求排队、命令自身执行耗时、后台任务(持久化、过期回收、淘汰、槽迁移)干扰,以及系统层资源(CPU 抢占、内存换出、磁盘 IO、容器配额)。每一层都有对应的观测手段,跨层跳跃排查往往会得出错误结论。实践统计里,报「Redis 变慢」的工单有相当一部分最终落在网络链路或业务侧调用方式,而不是命令执行本身。

基本信息

网络层ping / mtr / redis-cli --latency
客户端层连接池等待与重试日志
服务端排队INFO clients 的 blocked_clients
执行层SLOWLOG / LATENCY LATEST / latencystats
后台任务INFO persistence 与 fork 相关指标
系统层vmstat / iostat / CPU steal
目标先定性到层,再定量到命令

典型使用场景

  • 业务侧 P99 上升,需要先判断是链路问题还是实例问题
  • 同一实例上多业务互相指责,用分层证据划清责任边界
  • 压测结果与线上表现不一致,核对是否忽略了客户端排队
  • 排查周期性抖动,区分持久化 fork 与过期回收的贡献
  • 容器环境延迟偏高,确认是否存在 CPU 限流与配额争抢
  • 给延迟治理排优先级,先解决影响面最大的一层

分层取证的常用命令

分层取证的常用命令
redis-cli --latency                 # 从客户端测服务端往返延迟
redis-cli --latency-history         # 按时间窗看延迟波动
redis-cli --intrinsic-latency 100   # 测本机自身调度延迟基线
redis-cli SLOWLOG GET 10            # 看是否有慢命令
redis-cli LATENCY LATEST            # 看各类事件的最新尖峰
redis-cli INFO cpu                  # 主线程与后台线程的 CPU 分布
vmstat 1 5                          # 系统层 CPU 等待与换页
iostat -x 1 3                       # 磁盘层是否成为瓶颈

分层证据对照

层观测手段典型信号
网络ping、mtr、--latency往返稳定但业务延迟高
客户端连接池指标与重试获取连接排队时间变长
服务端排队blocked_clients、连接数命令积压在主线程前
执行SLOWLOG、latencystats个别命令耗时突出
后台任务fork 相关指标与日志周期性尖峰与持久化时间吻合
系统vmstat、iostat、stealCPU 被抢或磁盘饱和
先分层再下钻,避免一上来就在错误的层面消耗时间:命令级工具看不到网络抖动,网络工具也解释不了单核打满。
多租户实例上,把延迟时间轴与各业务的调用量曲线对齐,通常能快速锁定是哪个业务改变了负载结构。

易错点

  • 跨层跳跃排查,手上证据彼此不构成链条,结论反复推翻
  • 只测一层就下结论,把网络问题当成 Redis 性能问题处理
  • 把客户端观测到的总延迟直接当成命令执行耗时,忽略排队与网络部分
  • 忽略容器 CPU 配额与 steal,把系统层限流当成实例过载扩容
  • 只看平均值不看尾部,长尾问题的证据被平均数抹平

数据来源与参考

  • Redis 官方文档:延迟分析框架
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌