在redis日志中,经常出现与后台保存相关的行,例如:
[11465] 06 Mar 08:10:11.292 * RDB: 541 MB of memory used by copy-on-write
任何人都可以澄清这条线的确切含义吗?
答案 0 :(得分:2)
当redis想要保存快照时,它会首先分叉,然后分叉的进程会保存数据集,而不会因为必须提供请求而受到干扰等。
由于你现在有两个进程,它可能意味着使用两倍的内存,对吧?但不是,操作系统实际上通过让新进程引用旧进程的内存页来优化这种情况。
有趣的事情发生在原始服务器的内存在fork之后发生更改(由于您发出更新命令或其他内容)。分叉进程必须维护分叉时获得的任何内存状态,因此系统在更改共享页面之前,将页面复制到分叉进程(以便它不再共享)然后改变原始过程'页。这被称为" copy-on-write"。
在您的情况下,这大致意味着在保存快照所需的时间内,您更改了541MB的数据。