美文网首页
Redis变慢了(五) - fork耗时严重

Redis变慢了(五) - fork耗时严重

作者: aoshi | 来源:发表于2020-11-26 14:13 被阅读0次

    转载地址 :https://www.jianshu.com/p/1ec5af47ae00

    fork耗时严重

    如果你的Redis开启了自动生成RDB和AOF重写功能,那么有可能在后台生成RDB和AOF重写时导致Redis的访问延迟增大,而等这些任务执行完毕后,延迟情况消失。

    遇到这种情况,一般就是执行生成RDB和AOF重写任务导致的。

    生成RDB和AOF都需要父进程fork出一个子进程进行数据的持久化,在fork执行过程中,父进程需要拷贝内存页表给子进程,如果整个实例内存占用很大,那么需要拷贝的内存页表会比较耗时,此过程会消耗大量的CPU资源,在完成fork之前,整个实例会被阻塞住,无法处理任何请求,如果此时CPU资源紧张,那么fork的时间会更长,甚至达到秒级。这会严重影响Redis的性能。
    具体原理也可以参考我之前写的文章:Redis持久化是如何做的?RDB和AOF对比分析。

    我们可以执行info命令,查看最后一次fork执行的耗时latest_fork_usec,单位微妙。这个时间就是整个实例阻塞无法处理请求的时间。

    除了因为备份的原因生成RDB之外,在主从节点第一次建立数据同步时,主节点也会生成RDB文件给从节点进行一次全量同步,这时也会对Redis产生性能影响。
    要想避免这种情况,我们需要规划好数据备份的周期,建议在从节点上执行备份,而且最好放在低峰期执行。如果对于丢失数据不敏感的业务,那么不建议开启AOF和AOF重写功能。
    另外,fork的耗时也与系统有关,如果把Redis部署在虚拟机上,那么这个时间也会增大。所以使用Redis时建议部署在物理机上,降低fork的影响。

    相关文章

      网友评论

          本文标题:Redis变慢了(五) - fork耗时严重

          本文链接:https://www.haomeiwen.com/subject/ptaumktx.html