连接层参数怎么调
连接层参数决定实例在连接风暴与空闲连接长期占用下的表现:tcp-backlog 是已完成三次握手、等待被 accept 的队列长度,需要与内核 net.core.somaxconn 匹配;timeout 回收空闲连接;tcp-keepalive 探测死连接;tcp-nodelay 关闭 Nagle 算法以降低小包延迟。
基本信息
| 适用 | Redis 全版本,部分参数需重启生效 |
|---|---|
| tcp-backlog | 已完成握手的等待队列,需与内核 somaxconn 对齐 |
| timeout | 空闲连接回收时间(秒),0 表示不断开 |
| tcp-keepalive | 空闲连接心跳探测间隔(秒) |
| tcp-nodelay | 禁用 Nagle 算法,默认开启 |
配置示例
配置示例
tcp-backlog 511 # Redis 侧等待队列长度,内核 somaxconn 要匹配
timeout 300 # 空闲 300 秒断开,回收泄漏的空闲连接
tcp-keepalive 300 # 每 300 秒探测一次,及时识别死连接
tcp-nodelay yes # 关闭 Nagle 算法,降低小包往返延迟
# 内核侧需同步(持久化写 /etc/sysctl.conf):
# net.core.somaxconn = 1024
# net.ipv4.tcp_max_syn_backlog = 1024参数与排查口径
| 项 | 含义 | 排查要点 |
|---|---|---|
| tcp-backlog | 已完成握手的等待队列长度 | 连接风暴时溢出会丢连接 |
| somaxconn | 内核允许的队列上限 | 小于 tcp-backlog 时前者优先,配置白改 |
| timeout | 空闲连接回收秒数 | 设为 0 且连接池泄漏时连接数只涨不降 |
| tcp-keepalive | 死连接探测间隔 | 过长会导致僵死连接长期占用 |
| Send-Q / Recv-Q | ss -lnt 输出中的队列情况 | 可判断是否存在 backlog 溢出 |
典型使用场景
- 连接数异常排查,确认是业务增长还是连接泄漏
- 压测前评估连接风暴下的队列容量
- 客户端连接池与实例参数联动调优
- 内核参数与 Redis 参数对齐的基线检查
- 迁移到新机器后确认 sysctl 配置已同步
连接数异常时不要只看服务端配置:用 ss -lnt 观察队列与 Send-Q,把 Redis 参数与内核 net.core.somaxconn 一起核对。
timeout 设置为 0 表示永不主动断开空闲连接,一旦客户端连接池存在泄漏,连接数会持续增长直至达到 maxclients。
排查顺序建议
- 先用 ss -lnt 看队列与连接分布,判断是否真的存在溢出
- 再核对内核 somaxconn 与 tcp-backlog 是否匹配
- 然后检查 timeout 与 keepalive 是否符合客户端的连接复用习惯
- 调整后观察连接数曲线与溢出计数是否改善,再决定是否继续调