Redis 常见的持久化开发运维问题
开发运维常见问题
-
fork操作
-
进程外开销
-
AOF追加阻塞
-
单机多实例部署
fork操作
1.同步操作
内存页的拷贝,本身速度非常快,不会阻塞主线程
2.与内存量有关:内存越大,耗时越长
3.info:latest_fork_usec #fork fork的执行时间
4.改善fork
1).有限使用物理机或者高效支持fork操作的虚拟化技术
2).控制Redis 实例最大可用内存 :maxmemory
3)合理配置linux内存分配策略 :vm.overcommit_memory=1
4).降低fork 频率:例如放宽AOF重写自动触发时机,不必要的全量复制
子进程的开销和优化
1.cpu
开销:RDB和AOF 文件生成,属于cpu密集型
优化:不做cpu绑定,不和cpu 密集型部署
2.内存
开销:fork 内存开销,共享父进程快照
优化:避免单机多部署的大量重写
3.硬盘
开销:AOF 和RDB文件写入,可以结合iostat,iotop分析
硬盘优化:
-
不要和高硬盘负载服务部署在一起:储存服务,消息队列
-
no-appendfsync-on-rewrite = yes
-
根据写入量觉定磁盘类型:例如SSD
-
单机多实例持久化文件目录可以考虑分盘
AOF追加阻塞(可以参考硬盘的优化策略)
主线程负责写入AOF缓存区,同步线程负责没秒刷盘操作对比上次AOF同步时间。如果大于2s 阻塞,直到同步完成
小于2s,通过。