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

谁践踏了优雅 2023-10-15 12:24 136阅读 0赞

目录

一、输出缓冲区概念

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

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

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

五、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 条评论,136人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C#+AE缓冲区分析

    趁着这次总结的机会,就想着把这几个星期编的小功能都写成博客记录下来,省的之后遗忘,我写这些东西也算是给自己加深印象吧,鱼的记忆哈哈。 一、AE缓冲区接口和类 还是老生常