问题排查
- CONFIG SET slowlog-log-slower-than 5000 超过5毫秒记录慢日志
- CONFIG SET slowlog-max-len 1000 保留最近1000条慢日志
- SLOWLOG get 5 查询最近 5 条慢日志
- 请求量并不大,CPU使用率很高,使用了复杂度高的命令如 sort、sunion、zunionstore
- SET、DELETE慢,key对应的value太大
- redis-cli -h $host -p $port –bigkeys -i 0.01 每隔0.01秒间歇扫描大key
- 主动集中过期导致卡顿, 定时清理会100毫秒随机删除20个,如果过期超过25%会继续删除20个,或者已经超过25毫秒.
- 达到内存上限导致淘汰算法卡顿。
- allkeys-lru:不管 Key 是否设置了过期,淘汰最近最少访问的 Key。
- volatile-lru:只淘汰最近最少访问并设置过期的 Key。
- allkeys-random:不管 Key 是否设置了过期,随机淘汰。
- volatile-random:只随机淘汰有设置过期的 Key。
- allkeys-ttl:不管 Key 是否设置了过期,淘汰即将过期的 Key。
- noeviction:不淘汰任何 Key,满容后再写入直接报错。
- allkeys-lfu:不管 Key 是否设置了过期,淘汰访问频率最低的 Key(4.0+支持)。
- volatile-lfu:只淘汰访问频率最低的过期 Key(4.0+支持)。
- 开启 RDB 和 AOF 重写功能或主从同步导致的RDB fork进程时对内存页表进行复制导致的卡顿
- 开启了进程绑定cpu,导致RDB或AOF的fork子进程也会绑定到同一个cpu
- AOF刷盘机制设置问题
- appendfsync always:每次写入都刷盘。
- appendfsync everysec:1 秒刷一次盘。
- appendfsync no:按照操作系统的机制刷盘。
- 开启了系统的swap虚拟内存交换
- 网络本身的原因