可能存在问题
- 内在原因:API或数据结构使用不合理、CPU饱和、持久化阻塞等
- 外在原因:CPU竞争、内存交换、网络问题等
问题处理:
- API或数据结构使用不合理,可能存在慢查询或者大对象:
- 发现慢查询 slowlog get {n} : 降低低算法度命令、拆分大对象
- 发现大对象 --bigkeys
- CPU饱和,Redis并发量过多导致把CPU使用率跑到100%
- OPS压力过大时需要通过水平扩展分摊OPS压力
- OPS不大时可能是因为使用了高算法度命令或过度内存优化,利用info commandstats分析不合理开销的命令
- 持久化阻塞,可能为fork阻塞、AOF刷盘阻塞或HugePage写阻塞
- CPU竞争
- Redis为典型的CPU密集型应用,不应与其他CPU密集型服务部署在一起
- Redis绑定CPU减少上下文切换,提高性能,但持久化时子进程会与父进程同时使用同一CPU且占用CPU达90%以上,导致父子进程CPU激烈竞争
- 内存交换,Redis使用的内存被交换到硬盘导致性能大为下降
- 保证机器内存充足、确保Redis的maxmemory、降低swap优先级
- 网络问题,连接拒绝、网络延时、网卡软中断。