目录
1 查看客户端连接信息
通过执行client list命令来查看客户端连接信息,每行都代表一个客户端
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:58752 fd=7 name= age=19951 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
1.1 客户端标识
id:客户端连接唯一标识,这个id随redis连接自增,redis重启后会从0开始
addr:客户端连接ip和端口
fd:socket文件描述符,与lsof命令结果中fd是同一个。如果该客户端=-1表示该客户端不是外部客户端,而是redis伪装的
name:客户端名字
1.2 输入缓冲区
1.2.1 输入缓冲区介绍
redis为每个客户端分配了输入缓冲区,缓冲区作用是对客户端发送的命令临时保存,同时redis会从输入缓冲区中拉取命令并执行。
qubf:查询缓冲区容量(字节)
qbuf-free:查询缓冲区剩余容量(字节)
1.2.2 输入缓冲区使用不当会出现两个问题
一旦某个客户端缓冲区超过1G,客户端将会被关闭
输入缓冲区不受maxmemory控制,假设一个Redis实例设置maxmemory为4G,已经存储2G数据,如果此时输入缓冲区使用了3G,已经超过4G,则会导致数据丢失、键值淘汰、OOM等情况
1.2.3 造成输入缓冲区过大的原因
redis处理速度跟不上缓冲区输入速度,每次输入输出缓冲区包含大量bigkey
redis发生阻塞,短期内不能处理命令,导致缓冲区积压
1.2.4 缓冲区监控
定期执行client list命令
收集qubf和qubf-free找到异常连接记录并分析,优点是能精准分析每个客户端来定为问题,缺点是执行速度较慢,特别是连接较多的情况下,可能会阻塞redis
还行info clients命令,查找最大输入缓冲区
127.0.0.1:6379> info clients
# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
优点是执行速度快,缺点是只能查询出输入缓冲区最大的客户端,不能精准定位
1.3 输出缓冲区
obl:定长Output buffer的使用字节数,返回比较小的执行结果
oll:可变大小output buffer的对象个数,返回比较大的执行结果,如大字符串,hgetall、smembers执行结果
omem:可变大小output buffer的内存使用字节数
输出缓冲区对应的配置是
client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
class:客户端类型,normal-普通客户的,replica-slave客户端,pubsub-发布订阅客户端
hard limit:客户端使用的输出缓冲区大于该值时会关闭
soft limit&soft client:客户端使用的输出缓冲区超过了soft limit并且持续时间超过soft seconds时,客户端会关闭
默认配置如下
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
监控输出缓冲区方案同输入缓冲区
1.4 客户端存活状态
age:客户端连接时间(秒)
idle:客户端连接空闲时间(秒)
当idle和age相差不大时说明该连接最近一段时间处于空闲状态,可以设置连接空闲时间达到一个阈值时释放掉,防止占用太多资源
1.5 杀掉指定ip端口的客户端
client kill ip:port
2 客户端缓冲区统计
127.0.0.1:6379> info clients
# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
connected_clients:当前节点客户端连接数,一旦超过最大值则新连接将被拒绝
client_recent_max_input_buffer:当前所有输入缓冲区占用最大容量
client_recent_max_output_buffer:当前所有输出缓冲区占用最大容量
blocked_clients:正在执行阻塞命令个数,如blpop,brpop等
3 客户端连接数统计
127.0.0.1:6379> info stats
# Stats
total_connections_received:5
……
rejected_connections:0
total_connections_received:redis自启动以来处理的客户端连接总数
rejected_connections:redis自启动以来拒绝的客户端连接总数
4 内存监控
4.1 查看那当前内存使用大小
127.0.0.1:6379> info memory
# Memory
used_memory:1264056,数据占用多少内存(字节)
used_memory_human:1.21M
used_memory_rss:20791296 redis进程占用总物理内存量
used_memory_rss_human:19.83M
used_memory_peak:1284936,数据占用内存的峰值(字节)
used_memory_peak_human:1.23M
4.2 查看内存配置大小
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
0表示不限制