zoukankan      html  css  js  c++  java
  • Redis面试——有关RDB做持久化有哪些风险

    题目大概是这样:

    使用一个2核CPU4GB500G磁盘,Redis实例占用2GB,写读比例为8:2,此时做RDB持久化产生的风险主要在于CPU和内存资源两方面:

    1) 内存资源风险: Redis fork子进程做RDB持久化,由于写的比例是80%,那么持久化过程中,"copy-on-write"会重新分配整个实例80%d的内存副本,大约重新分配1.6G内存空间,这样整个系统的内存使用接近饱和,如果此时父进程又有大量的key写入,很快机器的内存

    就被吃光,如果机器不开启Swap机制,那么就会OOM,反之如果开启了Swap则性能急剧下降,因为造成了直接和磁盘的IO,达不到Redis原有的高性能标准。

    2) CPU资源风险: 虽然子进程在做RDB持久化,但生成RDB快照过程会消耗大量的CPU资源,虽然Redis处理请求是单线程的,但Redis Server还有其他线程在后台工作,例如AOF每秒刷盘,异步关闭文件描述符这些操作,由于机器只有2核CPU,这就意味着父进程占用了超过一半的CPU资源,此时子进程做RDB持久化,可能会产生CPU竞争,导致的结果就是父进程处理请求的延迟增大,子进程生成的RDB快照的时间也会变长,整个Redis Server性能下降。

    3)延伸:如果Redis进程绑定了CPU,那么子进程会继承父进程争夺同一个CPU资源,整个Redis Server的性能必然会受到影响,所以如果Redis需要开启定时RDB和AOF重写,进程一定不能绑定CPU。

  • 相关阅读:
    random模块的讲解
    函数的商城代码练习
    python文件作业
    函数的学习
    三元表达式和列表生成式
    jQuery 遍历方法
    CSS font属性综合写法
    JQuery 添加节点
    Bootstrap 响应式中的兼容
    jQuery 中的attr和prop的区别
  • 原文地址:https://www.cnblogs.com/ligtto2018/p/14070373.html
Copyright © 2011-2022 走看看