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操作
-----