持久化相关问题

fork操作引发的问题

  • fork 操作是同步操作,如果 fork 操作过慢,就会阻塞 redis 主线程;
  • fork 操作的时间和内存有关,内存越大,fork 操作的时间越长;
  • 查看 fork 操作的时间:info:latest_fork_usec
改善 fork 的方法
  • 优先使用物理机;
  • 控制 redis 实例最大可用内存,maxmemory
  • 合理配置 Linux 内存分配策略:vm.overcommit_memory=1,如果设置为0,那么当 Linux 的内存不够时,将拒绝分配内存;
  • 降低 fork 频率:放宽 AOF 重写自动触发机制,减少不必要的全量复制;

子进程开销和优化

  • CPU
    • 开销:文件写入是 CPU 密集型操作;
    • 优化:不要将 redis 进程绑定到某个 CPU 上,不和 CPU 密集型部署;
  • 内存
    • 开销:fork 子进程的时候对内存是有开销的,理论上和父进程内存一样,但 Linux 的 Copy-on-Write 会使父子进程共用相同的物理内存件;
    • 优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • 硬盘
    • 开销:AOF 和 RDB 文件写入,可以结合 iostat 和 iotop 分析;
    • 优化:
      • 不要和高硬盘负载服务部署在一起,比如存储服务,消息队列服务;
      • no-appendfsync-on-rewrite yes
      • 根据写入量决定磁盘类型,比如 SSD;

AOF 追加阻塞

  • 主线程向 AOF 缓冲区中写数据;
  • 同步线程每隔一秒将 AOF 缓冲区刷入磁盘;
  • 主线程会检查上次刷入的时间:
    • 如果小于 2s,正常;
    • 如果大于 2s,阻塞,直到这次刷入磁盘的操作完成;
AOF 阻塞问题的定位
  • redis 日志;
  • info persistence 中的 aof_delayed_fsync:100 是记录刷盘次数的,可以单独收集这个值,然后计算分析一段时间的刷盘次数;
  • 通过 Linux 的 top 命令查看磁盘的使用情况;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    空语阅读 1,612评论 0 2
  • 企业级redis集群架构的特点 海量数据 高并发 高可用 要达到高可用,持久化是不可减少的,持久化主要是做灾难恢复...
    lucode阅读 2,222评论 0 7
  • 本文是《Redis开发与运维》的学习笔记。内容大部分摘自此书。 众所周知,redis是内存数据库,它把数据存储在内...
    大数据Zone阅读 578评论 0 3
  • 目录: RDB AOF 持久化恢复 问题排查和性能优化fork 操作子进程开销AOF 追加阻塞单机多实例部署 总结...
    莫那一鲁道阅读 1,455评论 0 24
  • 在科学的道路上,我们并非总能得到预期的结果,失望与沮丧也时常来扰。本来满心欢喜地期待某项药物试验可以得出有效的研究...
    勇敢的心207阅读 4,492评论 0 0