六、Redis常见的持久化开发运维问题
1.fork操作(fork一个子进程这个操作本身,不包括后续的操作)
- fork是一个同步操作
- fork操作的耗时与内存量息息相关:内存越大,耗时越长。同时也与机器类型有关
- info:latest_fork_usec 记录上一次fork操作消耗的微秒数
如何改善fork?
- 优先使用物理机或者高效支持fork操作的虚拟化技术
- 控制Redis实例最大可用内存:maxmemory
- 合理配置Linux内存分配策略:vm.overcommit_memory=1
- 降低fork频率,例如放宽AOF重写自动触发时机,不必要的全量复制
2.子进程开销和优化
(1)cpu
- 开销:RDB和AOF文件生成,属于cpu密集型应用
- 优化:不做cpu绑定;不和cpu密集型应用部署在一起-
(2)内存
- 开销:fork内存开销,copy-on-write
- 优化:echo never > /sys/kernel/mm/tranparent_hugepage/enabled 关闭Linux的大内存页(2M)分配
(3)硬盘
- 开销:AOF和RDB文件的写入,可以结合iostat,iotop分析
- 优化:
- 不要和高硬盘负载服务部署在一起:比如存储服务、消息队列等
- no-appendfsync-on-rewrite = yes 在重写的时候不要追加日志
- 根据写入量决定磁盘类型
- 单机多实例持久化文件目录可以考虑分盘
3.AOF追加阻塞
![]()
posted @
2020-05-23 22:22
scnb
阅读(
86)
评论()
收藏
举报