目录

01.blocked_clients:客户端阻塞

02.connected_clients:客户端连接

03.rejected_connections:拒绝连接数

04.mem_fragmentation_ratio:内存碎片

05.used_memory:已用内存

06.扩展


01.blocked_clients:客户端阻塞

查看情况

--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info clients
--./redis-cli -h 127.0.0.1 -p 6379 -a ...... client list|grep "flags=b"

关注flags和cmd的格式:flags=b(当前客户端正在等待阻塞事件),cmd=blpop/brpop/brpoppush
id=517664 addr=10.24.24.134:32962 fd=36 name= age=21598 idle=3 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=blpop 
id=517659 addr=10.24.24.135:51362 fd=24 name= age=21660 idle=10 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=blpop 

临时处理1:

--client KILL ip:port
client KILL 10.24.24.134:32962

临时处理2:适当提高基本告警指标

02.connected_clients:客户端连接

查看情况

--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info clients
--./redis-cli -h 127.0.0.1 -p 6379 -a ...... client list 

主要指标
idle:客户端连接空闲时间,单位秒。可以用于判断连接是否有没有被及时释放

临时处理:

--client KILL ip:port
client KILL 10.24.24.134:32962

相关参数:设置客户端空闲超过timeout,服务端会断开连接。0表示关闭功能。动态修改:
--config get timeout
--config set timeout 300

最大连接数,默认是10000,动态修改:
--config get maxclients
--config set maxclients 20000

将redis内存中新配置刷新到配置文件
--config rewrite

03.rejected_connections:拒绝连接数

rejected_connections:表示因为超出最大连接数限制而被拒绝的客户端连接次数,如果这个数字很大,意味着服务器的最大连接数设置的过低需要调整 maxclients 参数。

查看情况

--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info stats
--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info stats|grep reject

临时处理:kill 掉 idle 值较大的连接

--client list
--client KILL ip:port
client KILL 10.24.24.134:32962

参数方面可适当提高最大连接数,默认是10000
动态修改
--config get maxclients
--config set maxclients 20000

将redis内存中新配置刷新到配置文件
--config rewrite

04.mem_fragmentation_ratio:内存碎片

查看情况
--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info memory
--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info memory|grep "mem_fragmentation"

最好的办法是重启,但可能会有数据丢失,且数据恢复复杂

Redis4版本之后开始支持内存碎片的清理,默认情况下自动清理碎片的参数是关闭的:
--./redis-cli -h 10.24.24.137 -p 7001 -a ...... config get activedefrag
--config get activedefrag

动态开启:
--config set activedefrag yes

--config set active-defrag-ignore-bytes 100mb
--config set active-defrag-threshold-lower 10

将redis内存中新配置刷新到配置文件
--config rewrite

开启后,后台会启动进程。也可以手动清理:
--memory purge

--相关参数
# 碎片整理总开关
# activedefrag yes

# Minimum amount of fragmentation waste to start active defrag
# 内存碎片达到多少的时候开启整理
active-defrag-ignore-bytes 100mb

# Minimum percentage of fragmentation to start active defrag
# 碎片率达到百分之多少开启整理
active-defrag-threshold-lower 10

# Maximum percentage of fragmentation at which we use maximum effort
# 碎片率小余多少百分比开启整理
active-defrag-threshold-upper 100

active-defrag-cycle-min 25: 表示自动清理过程所用 CPU 时间的比例不低于 25%,保证清理能正常开展;

active-defrag-cycle-max 75:表示自动清理过程所用 CPU 时间的比例不高于 75%,一旦超过,就停止清理,从而避免在清理时,大量的内存拷贝阻塞 Redis,导致响应延迟升高。

05.used_memory:已用内存

查看情况
--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info memory
--./redis-cli -h 127.0.0.1 -p 6379 -a ...... info memory|grep "memory_human"

动态修改最大内存
--./redis-cli -h 10.24.24.137 -p 7001 -a ...... config get maxmemory
--config get maxmemory
--config set maxmemory 16G

将redis内存中新配置刷新到配置文件
--config rewrite

相关参数
maxmemory-policy volatile-lfu

#内存容量超过maxmemory后的处理策略。
#volatile-lru:利用LRU算法移除设置过过期时间的key。
#volatile-random:随机移除设置过过期时间的key。
#volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:随机移除任何key。
#noeviction:不移除任何key,只是返回一个写错误。
#上面的这些驱逐策略,如果redis没有合适的key驱逐,对于写命令,还是会返回错误。redis将不再接收写请求,只接收get请求。写命令包括:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort。
# maxmemory-policy noeviction
 
# lru检测的样本数。使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出闲置时间最长的key移除
# maxmemory-samples 5
 
# 是否开启salve的最大内存
# replica-ignore-maxmemory yes

06.扩展

--client list 注释
id    客户端连接id
addr    客户端连接IP和端口
laddr    redis数据库连接地址和端口
fd    socket的文件描述符
name    客户端连接名
age    客户端连接存活时间
idle    客户端连接空闲时间,单位秒。可以用于判断连接是否有没有被及时释放
flags    客户端类型标识
db    当前客户端正在使用的数据库索引下标
sub/psub    当前客户端订阅的频道或模式数
multi    当前事务中已执行命令个数
qbuf    输入缓冲区总容量
qbuf-free    输入缓冲区剩余容量
argv-mem    下一个命令的不完整参数(已从查询缓冲区中提取)
obl    固定缓冲区的长度
oll    动态缓冲区列表的长度
omem    固定缓冲区和动态缓冲区使用的容量
tot-mem    此客户端在其各个缓冲区中消耗的总内存
events    文件描述符事件(r:可读;w:可写)
cmd    当前客户端最后一次执行的命令,不包含参数
user    用户名称,默认default
redir    当前客户端跟踪重定向的客户端id

--client list中flag客户端标识种类
客户端类型    说明
N    普通客户端,未设置任何flag
M    当前客户端是master节点
S    当前客户端是slave节点
O    当前客户端正在执行monitor命令
X    当前客户端正在执行事务
b    当前客户端正在等待阻塞事件
i    当前客户端正在等待VM I/O,但是此时状态目前已经废弃不用
d    一个受监视的键已被修改,exec命令将失败
u    客户端未被阻塞
c    回复完整输出后,关闭连接
A    尽可能快地关闭连接