Redis超时、阻塞问题排查

原理分析

从原理层面,我们可以将此类问题分为内因和外因

内因

持久化带来的阻塞问题(AOF重写和生成RDB)

redis在做AOF或生成RDB的时候,需要fork操作创建子进程,fork过程,虽然不会直接拷贝父进程的物理内存空间,但回复制父进程的内存页表.
参考:https://segmentfault.com/a/1190000043968746

CPU饱和

如果redis的cpu跑到近100%,是比较危险的,可以使用top命令查看,或者使用redis-cli --stat命令查看

慢查询和大key

使用keys* 或者hgetall等命令,时间复杂度是O(n)
大key的读写和写入需要更大内存空间,容易阻塞

外因

使用SWAP内存交换

如果操作系统的内存不够,将一部分内存数据换出到磁盘,那么Redis的访问无疑会受到影响,因为内存和磁盘的访问速度,差了好几个数量级。
因此,使用Redis的机器上,尽量关闭swap,并设置Redis的maxmemory,避免Redis内存的无限制上涨。

网络问题

这个就非常常见了,网络抖动,网络闪断,网络延迟,网卡软中断等。这里给出查看网络延时的办法,通常情况下,可以使用redis-cli --latency命令来查看Redis的延迟情况。

作者:footman原文地址:https://segmentfault.com/a/1190000043967763

%s 个评论

要回复文章请先登录注册