V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Eridani117
V2EX  ›  问与答

Redis 持久化时的内存问题

  •  
  •   Eridani117 · 2021-03-30 16:03:01 +08:00 · 830 次点击
    这是一个创建于 1338 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天一个前辈说,Redis 在 Rdb 持久化的时候,应该拥有双倍内存。
    比如 MaxMemory 是 1G,那么机器总内存就应有 2G 。
    我觉得他讲的应该是 fork 出子线程之后,子线程将主线程的内存做一个快照,导致总共需要 2G 。
    但是 Linux 不是有 copy-on-write 机制吗,只有内存页被修改主线程才需要新建一个页副本,其他情况下子线程和父线程共享内存。
    只有极端情况下才会导致需要双倍内存。
    请问有人能详细解释一下吗。

    1 条回复    2021-03-30 16:34:55 +08:00
    wakzz
        1
    wakzz  
       2021-03-30 16:34:55 +08:00
    这里说的就是 COW 过程中,原内存的一个内存页(默认 4K)被修改后,会发生中断然后复制出这个内存页的副本。极端情况下,如果 COW 过程中每个内存页都被修改,那么就会出现内存翻倍的情况。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:47 · PVG 04:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.