首页  

Redis性能问题排查要点     所属分类 redis 浏览量 169
慢日志 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全家桶简介