client list客户端相关信息:
- fd: socket文件描述符
- qbuf: 输入缓冲区(作用:临时存储客户端发送的命令)
- obl(固定缓冲区,使用字节数组)、oll(动态缓冲区,使用列表)、omen(使用的字节数)输出缓冲区(作用:保存命令执行的结果返回给客户端)
注:
- 单个客户端输入缓冲区大小超过1G会被关闭。
- 输出缓冲区:<class> 客户端分为三种类型,分别为普通客户端、slave客户端、发布订阅客户端。
- 输出缓冲区:<hard limit> 输出缓冲区大小大于该值会立刻关闭。
- 输出缓冲区:<soft limit>和<soft seconds> 输出缓冲区大小大于soft limit并持续soft seconds秒,会被关闭。
- 缓冲区+内存存储量超过maxmemory会出现数据丢失、键淘汰及OOM现象。通过client list或info client进行问题排查。
客户端相关配置:
- config set maxclients:动态设置客户端最大连接数
- config set timeout 30:当idle超过timeout,客户端会被关闭
- client kill ip:port:杀掉指定ip地址和端口的客户端
- client pause timeout:阻塞客户端timeout毫秒数
- monitor:用于监控Redis正在执行的指令,能监听所有命令,并发量大时输出缓冲区暴涨,可能产生内存大量使用的问题
- keep-alive:TCP活性检测,防止撕资源占用活连接
- keep-backlog:完成TCP三次握手的连接队列大小
客户端异常:
- 无法从连接池获取连接
- 连接池设置过小,供不应求
- 连接池未正确释放
- 慢查询较多造成归还较慢,产生的池子慢了现象
- 服务端异常
- 客户端读写超时
- 读写超时时间设置的过短
- 命令本身就慢
- 客户端与服务端间网络不佳
- Redis自身发生阻塞
- 客户端连接超时
- 连接超时时间设置过短
- Redis发生阻塞,造成tcp-backlog满,新的连接失败
- 客户端与服务端网络不正常
- 客户端缓冲区异常
- 输出缓冲区满
- 长时间闲置的连接被服务区主动断开
- 不正常并发读写,Jedis对象被多个线程并发操作
- Lua脚本正在执行
- 正在执行Lua脚本,并超过了lua-time-limit
- Redis正在加载持久化文件
- Jedis调用Redis时,Redis在加载持久化文件会抛出异常
- Redis使用内存超过maxmemory
- Jedis执行写操作时,Redis使用内存大于maxmemory的设置,此时需要具体分析原因
- 客户端连接数过大
- 客户端连接数超过maxclients,就会出现此异常
来源:oschina
链接:https://my.oschina.net/u/4525941/blog/4422328