redis阻塞bgsave与bsrewriteaof

Posted mvpbang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis阻塞bgsave与bsrewriteaof相关的知识,希望对你有一定的参考价值。

问题描述:

        redis在进程偶尔会出现2个进程redis-server \ redis-bgsave

Redis 首先 fork 一个子进程, 并在该子进程里进行归并和写持久化存储设备(如硬盘)的. 按照正常逻辑, 在一台多核的机器上, 即使子进程占满 CPU 和硬盘, 也不应该导致 Redis 服务阻塞啊!其实, 问题就出在硬盘上.

  Redis 服务设置了appendfsync everysec, 主进程每秒钟便会调用 fsync(), 要求内核将数据”确实”写到存储硬件里. 但由于子进程同时也在写硬盘, 从而导致主进程 fsync()/write() 操作被阻塞, 最终导致 Redis 主进程阻塞了.

解决方法:

no-appendfsync-on-rewrite yes

在子进程处理和写硬盘时, 主进程不调用 fsync() 操作. 注意, 即使进程不调用 fsync(), 系统内核也会根据自己的算法在适当的时机将数据写到硬盘(Linux 默认最长不超过 30 秒).

以上是关于redis阻塞bgsave与bsrewriteaof的主要内容,如果未能解决你的问题,请参考以下文章

Redis系列之——持久化与复制

redis中save和bgsave区别

Redis的持久化

四、Redis数据快速恢复之RDB(Redis DataBase)

Redis持久化

Redis持久化