Redis 持久化时的内存问题

2021-03-30 16:03:01 +08:00
 Eridani117

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

760 次点击
所在节点    问与答
1 条回复
wakzz
2021-03-30 16:34:55 +08:00
这里说的就是 COW 过程中,原内存的一个内存页(默认 4K)被修改后,会发生中断然后复制出这个内存页的副本。极端情况下,如果 COW 过程中每个内存页都被修改,那么就会出现内存翻倍的情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX