Redis性能问题排查要点
所属分类 redis
浏览量 928
慢日志 slowlog
# 5 毫秒
CONFIG SET slowlog-log-slower-than 5000
# 只保留最近 500 条慢日志
CONFIG SET slowlog-max-len 500
SLOWLOG get 5
1) (integer) 9999 # 慢日志ID
2) (integer) 1593769999 # 执行时间戳
3) (integer) 888 # 执行耗时(微秒)
4) 1) "LRANGE" # 命令和参数
2) "user_list:1000"
3) "0"
4) "-1"
使用复杂度过高的命令
O(N) 以上复杂度命令,例如 SORT SUNION ZUNIONSTORE 聚合类命令
N 值很大
bigkey
集中过期
可设置随机过期时间
# 后台线程执行
lazyfree-lazy-expire yes
实例内存达到上限 触发淘汰策略
使用 随机淘汰
lazyfree-lazy-eviction = yes
fork耗时严重
RDB 和 AOF rewrite
INFO 命令,查看 latest_fork_usec 单位微秒
latest_fork_usec:59888
后台定时RDB
降低主从库全量同步的概率 适当调大 repl-backlog-size 参数,避免主从全量同步
# AOF rewrite 期间,AOF 后台子线程不进行刷盘操作
no-appendfsync-on-rewrite yes
3 种刷盘机制
appendfsync always
appendfsync everysec
appendfsync no
单实例内存不要超过 10G
开启内存大页
cat /sys/kernel/mm/transparent_hugepage/enabled
建议关闭
echo never > /sys/kernel/mm/transparent_hugepage/enabled
内存大页机制,可以在一定程序上降低应用程序申请内存的次数
Redis 在每次申请内存时,耗时尽量短,建议关闭内存大页
关闭Swap
查看 进程 Swap 使用情况
$ cat /proc/$pid/smaps | egrep '^(Swap|Size)'
碎片整理
mem_fragmentation_ratio:1.55
mem_fragmentation_ratio = used_memory_rss / used_memory
used_memory 存储数据的内存大小
used_memory_rss 进程物理内存大小
4.0 以下版本,只能重启实例
4.0以上版本 开启碎片自动整理
activedefrag yes
# 内存使用 100MB 以下,不进行碎片整理
active-defrag-ignore-bytes 100mb
# 内存碎片率超过 10%,开始碎片整理
active-defrag-threshold-lower 10
# 内存碎片率超过 100%,尽最大努力碎片整理
active-defrag-threshold-upper 100
# 内存碎片整理占用 CPU 资源最小百分比
active-defrag-cycle-min 1
# 内存碎片整理占用 CPU 资源最大百分比
active-defrag-cycle-max 25
# 碎片整理期间,对于 List/Set/Hash/ZSet 类型元素一次 Scan 的数量
active-defrag-max-scan-fields 1000
网络带宽
频繁短连接
其它程序争抢资源
监控信息采集对性能的影响
redis优化要点
jedis 获取 redis info 信息
上一篇
下一篇
Runnable Callable Future FutureTask
老程序员的几点建议
为何不建议使用Optional
写代码的几个好习惯
redis-cli 使用
SpringCloud全家桶简介