Redis 常见问题及优化
1. fork操作
fork操作耗时的问题:
-
fork是个同步操作,虽然fork同步操作是非常快的,但是如果需要同步的数据量过大,fork就会阻塞redis主进程。
-
与内存息息相关 :内存越大,耗时越长(与机器类型相关)
-
查询持久化执行时间: late_fork_usec
改善fork
-
有限使用物理机或者高效支持fork 操作的虚拟化技术
-
控制Redis实例最大可用内存 : maxmenory
-
合理配置Linux内存分配策略:vm.overcommit_memory = 1
-
降低fork 频率:例如放宽AOF 重写自动触发时机,不必要的全量复制
2. 进程外开销
CPU:
- 开销:RDB 和 AOF文件生成,属于CPU密集型
- 优化:不做CPU绑定,不和CPU 密集型部署
内存:
- 开销:fork内存开销,copy-on-write
- 优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled
硬盘:
- 开销:AOF和RDB文件写入,可以结合iostat, iotop分析
- 优化 :
- 不要和高硬盘负载服务器一起部署,队列,存储服务等
- no-appendfsync-on-rewrite= yes
- 根据写入量决定磁盘类型:例如ssd
- 单机多实例持久化文件目录可以考虑分盘
3. AOF追加阻塞
127.0.0.1:6379 > info persistence
-----
aof_delayed_fsync : 100 //aof阻塞等次数 会进行 +1操作
-----
个人博客:blog.yanxiaolong.cn/