redis阻塞
1内在原因
1.1API或数据结构使用不合理(慢查询,大对象)
1.2.CPU饱和 redis-cli --stat 获取当前使用情况 +为每秒处理请求
redis处理命令只能用一个CPU,如果OPS几百或几千REDIS接近CPU饱和,可能是采用了高算法复杂度的命令,或者过度内存优化
1.3.持久化相关阻塞
FORK阻塞,AOF刷盘阻塞,hugepage阻塞(详见持久化)
2外在因素
2.1CPU竞争 1.与其他CPU密集型应用进程竞争,2绑定CPU导致重写子进程与父进程CPU竞争
2.2内存交换 (0,4K正常现象)
redis-cli -p 7013 info|grep process_id
cat /proc/66880/smaps|grep Swap
3网络问题
3.1连接拒绝
3.11网络闪断(网络割接或带宽耗尽情况)
3.12REDIS连接拒绝(连接数超过maxclients)
3.13连接溢出
(1)进程限制(最大文件打开数ulimit -n 临时设定)
(2)backlog队列溢出
系统对于特定端口TCP连接采用了backlog队列缓存,默认长度为511,通过tcp-backlog设定,如果REDIS用于高并发为了防止缓慢连接占用,可适当调大。linux系统默认为128
echo 511>/proc/sys/net/core/somaxconn
netstat -s|grep overflowed 统计因backlog队列溢出导致的连接拒绝
3.2网络延迟
3.3网卡软中断 top+1可以看到si就是软中断,出现再网络高流量吞吐