redis问题排查
当出现异常以后,可以从以下几个原因入手排查。
API或数据结构使用不合理
- 慢查询。命令
slowlog get [n]
。 1)使用了复杂读为O(n)的命令导致,如hgetall等。 2)调整大对象,拆分为更小的对象。使用redis-cli -h{ip} -p{port} --bigkeys
来扫描大对象。
- 慢查询。命令
- CPU饱和的问题。可以使用
redis-cli -h{host} -p{port} --stat
获取当前redis服务器的统计信息,再根据info command-stats
统计信息分析命令的合理开销之处。 - 持久化或相关的阻塞。1)fork阻塞 2)AOF刷盘阻塞,可以用
info persistence
统计aof_delayed_fsync
指标。 3)HugePage写操作阻塞。由于操作系统开启Transparent HugePages导致的副作用。 - 在redis的官方文档 中对常见阻塞有说明。
外在原因:
CPU竞争
- 进程竞争。
- 绑定CPU,可能会导致由于子进程进行RDB/AOF重写时与父进程进行竞争,因此对参与了持久化或主从复制的主节点不建议绑定CPU。
- 内存交换
- 网络问题
评论已关闭