发现阻塞
可以通过命令耗时、慢查询、持久化阻塞、连接拒绝、CPU/内存/网络/磁盘使用过载等,发现Redis阻塞
发现阻塞的内在原因
api或数据结构使用不合理
可以通过slowlog get n
获取最近n条慢查询命令
对于慢查询,可以调整命令,例如多用hgetall、hmget,禁用keys、sort等
把大对象调整拆分到多个小对象
CPU饱和
单节点执行太多命令可能导致CPU饱和,可以改用集群,或主备读写分离
持久化阻塞
fork阻塞、AOF刷盘阻塞、HugePage写操作阻塞
发现阻塞的外在原因
CPU竞争
redis所在的节点上尽量避免其他cpu密集型应用
内存交换
redis数据存储在内存,然而linux的内存交换swap机制对redis是非常致命的,会极大影响性能
可以使用如下流程检查内存交换:
# 查询redis进程号
redis-cli -p 6383 info server | grep process_id
# 根据进程号查询内存交换
cat /proc/4476/smaps | grep Swap
如果交换量都是0KB或者个别的是4KB,则是正常现象,说明Redis进程 内存没有被交换
如果有大量的内存交换,要检查宿主机,确保机器有充足的内存,并且设置redis的最大可用内存maxmemory
降低系统使用swap优先级,如echo10>/proc/sys/vm/swappiness
网络问题
注意网络闪断、连接溢出
要注意backlog队列溢出,系统对于特定端口的TCP连接使用backlog队列保存。Redis默认的长度 为511,通过tcp-backlog参数设置
如果Redis用于高并发场景为了防止缓慢 连接占用,可适当增大这个设置
评论区