连接风暴是什么
连接风暴的表现是连接数陡然上升、rejected_connections 增长,内存与 CPU 同时被推高。常见来源是客户端重试没有退避、负载均衡抖动或连接池配置失误。处理顺序是先稳住服务、再定位风暴来源、最后修正重试策略,否则风暴会按固定周期重复出现。
基本信息
| 信号 | connected_clients 陡增、rejected_connections 上升 |
|---|---|
| 常见来源 | 客户端重连风暴、负载均衡抖动、连接池配置失误 |
| 止血手段 | 入口限流、回收异常连接、谨慎评估后调整连接上限 |
| 排查工具 | CLIENT LIST 按连接名与来源地址聚合 |
| 根治方向 | 重试退避、连接池参数、实例规格与分片 |
典型使用场景
- 故障止血:先判断是否为客户端集体重连所导致
- 容量核对:连接数与 maxclients 的水位是否留有余量
- 连接池评审:池大小与实例的承载能力是否匹配
- 负载均衡核查:健康检查频率过高同样会造成建连压力
- 客户端退避:确认重试是否带指数退避与随机抖动
- 发布评估:应用实例扩容瞬间的连接增量是否被算过
采集与处置
采集与处置
redis-cli INFO clients # 当前连接数
redis-cli INFO stats | grep -E 'rejected_connections' # 被拒绝的连接计数
redis-cli INFO stats | grep -E 'total_connections_received' # 累计建连,看速率变化
redis-cli CLIENT LIST TYPE normal | wc -l # 普通连接数量
redis-cli CLIENT LIST | grep -o 'name=[^ ]*' | sort | uniq -c | sort -rn # 按连接名聚合
redis-cli CLIENT KILL TYPE pubsub SKIPME yes # 处置特定类型连接的示例
redis-cli CONFIG GET maxclients # 连接上限,评估余量指标读法
| 指标 | 含义 | 异常表现 |
|---|---|---|
| connected_clients | 当前连接数 | 陡增或长期贴着上限 |
| rejected_connections | 被拒绝的连接数 | 持续增长说明容量不足 |
| total_connections_received | 累计建连次数 | 速率突增说明重连风暴 |
| blocked_clients | 阻塞中的连接数 | 与连接数同时上涨要一并看 |
| maxclients | 连接数上限 | 要注意文件描述符的配套余量 |
连接数不是越多越好:每个连接都要占内存与文件描述符,实例的真实余量要靠压测得出,而不是按理论上限估算。
风暴期先稳服务再复盘:只清连接属于止血,重试策略不改,同样的风暴会在下一个故障点再次出现。