Redis第二十五讲 Redis存在的两大阻塞:Fork阻塞和AOF追加阻塞

Redis的Fork阻塞主要发生在RDB和AOF重写时,由于大内存可能导致fork操作耗时过长,阻塞客户端请求。AOF阻塞主要是由于频繁操作导致AOF文件过大,重写过程中可能引发主线程阻塞。解决方案包括调整AOF同步策略、增加slave节点、手动定时重写等。通过监控aof_delayed_fsync和系统IO工具可定位阻塞问题。
摘要由CSDN通过智能技术生成

Fork阻塞

在Redis中,众多因素导致Redis单机内存不能过大。当面对请求暴增时,需要从库扩容,如果单机内存过大会导致扩容时间过长;当主机宕机后,切换主机需要重新挂载从库,Redis内存过大会导致挂载速度过慢。

持久化过程中的fork操作

  • 父进程通过fork操作可以创建子进程;
  • 子进程创建后,父子进程共享代码段,不共享进程的数据空间,但是子进程会获得父进程的数据空间副本。
  • 在操作系统层面,基本都采用写时复制,也就是父子进程在修改数据空间之前,父子进程实际上可以共享数据空间;但是当父进程要进行数据修改的时候,操作系统会为修改的那一部分(内存的一页)制作一个副本。

虽然fork时,子进程不会复制父进程的数据空间,但是会复制内存页表(页表相当于内存的索引、目录);父进程的数据空间越大,内存页表越大,fork时复制耗时也会越多。

在Redis中,无论RDB持久化的bgsave还是AOF重写的bgrewriteaof,都需要主进程fork子进程来进行操作。如果Redis内存过大,会导致fork操作时复制内存页表耗时过多;而在Redis主进程进行fork时,是完全阻塞的,这就意味着无法响应客户端的请求,会造成请求延迟过大。为了减轻fork操作带来的阻塞问题,除了控制Redis单机内存的大小外,还可以适度放宽AOF重写出发的条件。

AOF阻塞

AOF阻塞主线程是因为随着数据量的增多,操作的频繁,AOF文件会越

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值