Redis异常分析-输出缓冲区过大
一.输出缓冲区概念
Redis为每个客户端分配了输出缓冲区,它的作用是保存命令的执行结果返回给客户端,为Redis和客户端交互返回结果提供缓冲。与输入缓冲区的区别是:输入缓冲区不能指定容量,而输出缓冲区可以通过参数client-output-buffer-limit来指定容量。
二.输出缓冲区过大的危害
输出缓冲区不受maxmemory的控制,假设一个Redis设置了maxmemory为4G,已经存储了2G数据,但是如果此时输出缓冲区使用了3GB,已经超过了maxmemeory限制,可能会产生数据丢失,键值淘汰,OOM等情况。
三. 造成输出缓冲区过大的原因
容易让输出缓冲区增大的命令,如,高并发下的monitor命令
四. 监控输出缓冲区异常的方法
4.1 client list命令
通过定期执行client list命令,收集qbuf和qbuf-free找到异常的连接记录并分析,最终可能出问题的客户端。
10.3.34.101:6378> client list
id=10521 addr=10.3.34.101:39696 fd=5name= age=4017 idle=41 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client
id=10533 addr=10.3.34.101:48896 f