maxclients 是什么
maxclients 限制 Redis 同时接受的客户端连接数,默认 10000。达到上限后新连接会被直接拒绝,客户端收到 max number of clients reached 之类的错误,同时 INFO stats 里的 rejected_connections 会增长。它不是一个孤立数字:实际生效值还受系统文件描述符上限约束,而每个连接本身都消耗内存。
基本信息
| 默认值 | 10000 |
|---|---|
| 达到上限 | 新连接被拒,客户端收到超限错误 |
| 相关指标 | INFO clients 的 connected_clients、INFO stats 的 rejected_connections |
| 系统依赖 | 服务可打开的文件描述符上限(如 systemd 单元的 LimitNOFILE) |
| 代价 | 每个连接消耗常驻内存与一个文件描述符 |
| 配套配置 | timeout、client-output-buffer-limit、tcp-keepalive |
典型使用场景
- 连接被拒排障:确认是被 maxclients 拦住还是被系统句柄上限拦住
- 容量规划:按峰值连接数预留内存与句柄,而不是只改一个数字
- 发布核对:连接池参数调整后复查连接数是否稳定
- 事故复盘:rejected_connections 一旦增长,说明存在过连接被拒的窗口
- 容器环境:确认宿主、服务单元与容器三层的句柄限制都已同步放大
最小示例
最小示例
redis-cli CONFIG GET maxclients # 当前上限
redis-cli INFO clients | grep connected_clients # 当前连接数
redis-cli INFO stats | grep rejected_connections # 是否出现过拒绝
redis-cli CLIENT LIST | wc -l # 复核连接明细条数
systemctl show redis -p LimitNOFILE # 服务侧句柄限制(服务名按实际调整)
ulimit -n # 当前 shell 的限制,用于对照相关指标读法
| 指标 | 含义 | 异常信号 |
|---|---|---|
| maxclients | 允许的最大并发连接数 | 与预期峰值差距过小,缺少余量 |
| connected_clients | 当前连接数 | 长期贴近上限,随时会被拒 |
| rejected_connections | 被拒的连接数 | 只要增长就说明发生过连接被拒 |
| LimitNOFILE | 服务可打开的文件描述符上限 | 小于所需值时配置的上限实际不生效 |
| 每连接内存开销 | client 结构与缓冲占用 | 调大上限前先算内存余量 |
Redis 启动时会尝试按 maxclients 提高自身的文件描述符上限;若系统或服务单元的限制更小,实际生效值会低于配置,启动日志里通常有对应告警,改完配置要回看日志确认。
调大上限不等于能承载更多流量:连接是常驻内存开销,连接数暴增会同时触发内存告警,真正的解法是连接池复用与闲置回收。