fork操作

fork操作

  • 同步操作 ,fork 是一个同步操作
    • 当执行一个 bgsavebgrewriteaof 首先会执行一个 fork 操作,它只是做一个内存页的拷贝,并不是拷贝所有内存,所以速度是非常快的。
    • 当 fork操作比较或卡在某一个点,这时它会阻塞redis主线程
  • 与内存量息息相关:内存越大,消耗越长(与机器类型有关)
  • info:latest_fork_usec -- 可以查看 fork 的执行时间

改善fork

  • 优先使用物理机或者高效支持fork操作的虚拟化技术
  • 控制Redis 实例最大可用内存:maxmemory
  • 合理配置Linux内存分配策略:vm.overcommit_memory = 1
    • 默认是0,当发现没有足够内存做内存分配时,就会不去分配。对于fork讲,会造成fork阻塞。
  • 降低fork频率:例如放宽AOF重写自动触发机制,不必要的全量复制

子进程开销和优化

1.CPU

  • 开销:RDB和AOF文件生成,属于CPU密集型
  • 优化:不做CPU绑定,不和CPU密集型部署

2.内存

  • 开销:fork内存开销,copy-on-write
  • 优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled

3.硬盘

  • 开销:AOF和RDB文件写入,可以结合iostat,iotop分析
  • 优化
    • 不要和高硬盘负载服务器部署在一起:存储服务、消息队列等
    • no-appendfsync-on-rewrite = yes
    • 根据写入量决定磁盘类型:例如SSD
    • 单机多实例持久化文件目录可以考虑分盘
posted on 2019-06-09 10:27  溪水静幽  阅读(637)  评论(0)    收藏  举报