redis

redis

Posted by nomadli on August 20, 2020

问题排查

  1. CONFIG SET slowlog-log-slower-than 5000 超过5毫秒记录慢日志
  2. CONFIG SET slowlog-max-len 1000 保留最近1000条慢日志
  3. SLOWLOG get 5 查询最近 5 条慢日志
  4. 请求量并不大,CPU使用率很高,使用了复杂度高的命令如 sort、sunion、zunionstore
  5. SET、DELETE慢,key对应的value太大
  6. redis-cli -h $host -p $port –bigkeys -i 0.01 每隔0.01秒间歇扫描大key
  7. 主动集中过期导致卡顿, 定时清理会100毫秒随机删除20个,如果过期超过25%会继续删除20个,或者已经超过25毫秒.
  8. 达到内存上限导致淘汰算法卡顿。
    • 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+支持)。
  9. 开启 RDB 和 AOF 重写功能或主从同步导致的RDB fork进程时对内存页表进行复制导致的卡顿
  10. 开启了进程绑定cpu,导致RDB或AOF的fork子进程也会绑定到同一个cpu
  11. AOF刷盘机制设置问题
    • appendfsync always:每次写入都刷盘。
    • appendfsync everysec:1 秒刷一次盘。
    • appendfsync no:按照操作系统的机制刷盘。
  12. 开启了系统的swap虚拟内存交换
  13. 网络本身的原因