redis client buffer 的配置参数为 "client-output-buffer-limit",默认值为:
127.0.0.1:6379> CONFIG GET "*output*" 1) "client-output-buffer-limit" 2) "normal 0 0 0 slave 0 0 0 pubsub 0 0 0"class :客户端种类,normal、slave、pubsub
normal:普通的客户端
slave: 从库的复制客户端
pub/sub: 发布与订阅的客户端
hard limit: 缓冲区大小的硬性限制。
soft limit: 缓冲去大小的软性限制。
soft seconds: 缓冲区大小达到了(超过)soft limit 值的持续时间。
client-output-buffer-limit 参数限制分配的缓冲区的大小,防止内存无节制的分配。参数的默认值都为 0,意思是不做任何限制。
redis server 触发保护机制主要有两种情况:
client buffer 的大小达到了 soft limit 并持续了 soft seconds 时间,将立即断开和客户端的连接。
client buffer 的大小达到了 hard limit,server 也会立即断开和客户端的连接。
八、网络问题 1. 连接拒绝网络闪断:一般在网络割接或带宽耗尽的情况;
redis 连接拒绝:连接数大于 maxclients 时拒绝新的连接进入,可以关注 info stats 的 rejected_connections 指标;
连接溢出:
进程限制:进程可打开最大文件数控制 —— ulimit -n,通常 1024,大量连接的 redis 需要增大该值;
backlog 队列溢出:系统对于特定端口 tcp 连接使用 backlog 队列保存,redis 默认 511,系统 backlog 默认 128,线上可使用 cron 定时执行 netstat -s | grep overflowed 统计;
2. 网络延迟测量机器之间的网络延迟
redis-cli -h {ip} -p {port} –latency
redis-cli -h {ip} -p {port} –latency-history 默认15秒完成一行统计,-i控制采样时间
redis-cli -h {ip} -p {port} –latency-dist 统计图展示,每1秒采样一次