Redis异常分析-输出缓冲区过大

目录

一、输出缓冲区概念

二、输出缓冲区过大的危害

三.、造成输出缓冲区过大的原因

四.、监控输出缓冲区异常的方法

五、info clients命令各参数详解


一、输出缓冲区概念

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 fd=6name= age=6 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768obl=0 oll=0 omem=0 events=r cmd=client

4.2 info clients命令

通过info命令的info clients模块,找到最大的输出缓冲区

10.3.34.101:6378> info clients

# Clients

connected_clients:2

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

4.3 client list与infoclients监控输出缓冲区的优劣势

命令优点缺点
client list可以精准的分析每个客户端来定位问题执行速度慢,客户端较多时,频繁执行存在阻塞redis的可能
info clients执行过程比client list快,分析过程较简单

不能精准定位到客户端

不能显示所有缓冲区的总量,只能显示最大量

五、info clients命令各参数详解

Clients
connected_clients:2

已连接客户端的数量(不包括通过从属服务器连接的客户端)

client_longest_output_list:0

所有客户端连接中,最长的输出列表, Redis输出缓存峰值

client_biggest_input_buf:0

所有客户端连接中,最大输入缓存 Redis输入缓存峰值

blocked_clients:0

正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值