Redis定位问题常用命令总结
redis客户端分析
文章目录
在redis出现故障时,很有可能是redis客户端没有合理使用redis,出现疯狂建立redis连接或者写入大量的数据到redis导致的,在这种情况下我们必须要找到有问题的客户端才能找到故障的触发点。
1.client list
使用命令行登录redis后,输入client list命令可以列出所有与redis服务端相连的客户端连接信息,输出的每一行代表一个客户端,下面对一些重要的属性进行介绍:
id=81548 addr=10.5.4.137:38296 fd=501 name= age=1849 idle=2 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hget
id=81877 addr=10.5.5.30:55960 fd=102 name= age=69 idle=20 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
- 客户端标志:id、addr、fd、name
id: 客户端的唯一标志,随redis的连接自增,重启redis后置为0。
addr:客户端的ip和端口,通过此项可以排查是否有其他异常客户端在连接redis。
fd:socket文件描述符,与lsof命令结果中的fd是同一个。
name:客户端的名字,gde场景下为空。 - 输入缓冲区:qbuf、qbuf-free
输入缓冲区是redis用来缓存客户端发来的命令的,qbuf和qbug-free分布代表这个缓冲区的总容量和剩余容量。redis会根据输入内容的大小自动调节输入缓冲区的大小;目前redis没有配置可以修改输入缓冲区的大小,只是限制单个客户端最多只能使用1G。
输入缓存区分配不当会导致两个问题:1.某个客户端的输入缓冲区超过1G,该客户端将被关闭;
2.输入缓冲去不受maxmemory控制,如果redis已存的数据加上输入缓冲区大小超过了mmaxmemory,可能会导致数据丢失、键值淘汰、OOM等情况。
输入缓存区使用不当一般是两个原因造成的:1.redis的处理速度跟不上输入缓冲去的输入速度,并且每次进入输入缓冲的的命令包含大量的bigkey,从而导致输入缓冲区过大;
2.redis发生了阻塞,短时间内不