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的延迟情况。