目 录CONTENT

文章目录

Redis阻塞的原因

FatFish1
2025-06-16 / 0 评论 / 0 点赞 / 1 阅读 / 0 字 / 正在检测是否收录...

发现阻塞

可以通过命令耗时、慢查询、持久化阻塞、连接拒绝、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用于高并发场景为了防止缓慢 连接占用,可适当增大这个设置

0

评论区