(六)Redis持久化的开发运维问题

六、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)  评论(0)    收藏  举报