gpt4 book ai didi

redis - 为什么redis aof重写0M到磁盘?

转载 作者:IT王子 更新时间:2023-10-29 06:10:15 26 4
gpt4 key购买 nike

我正在使用启用了 aof 的 Redis 2.6.14。重写后aof文件的大小变成了0M,我看不懂。请给我一些帮助。以下是日志:

 # Server started, Redis version 2.6.14
* The server is now ready to accept connections on port 7379
* Starting automatic rewriting of AOF on 2098226700% growth
* Background append only file rewriting started by pid 7961
* SYNC append only file rewrite performed
* AOF rewrite: 0 MB of memory used by copy-on-write
* Background AOF rewrite terminated with success
* Parent diff successfully flushed to the rewritten AOF (94778 bytes)
* Background AOF rewrite finished successfully

我认为“AOF rewrite: 0 MB of memory used by copy-on-write”是关键,谁来解释一下?


我是这样得到答案的:

1.edit the redis.conf, set the loglevel to debug.
2.I found that the keys is only 32, so it is the problem of my test program.
3.I modified the test program, make keys unique. When the program runs again, the keys in reids increase rapidly, and the aof file increase too.
4.when the rewrite is triggered, write 2M bytes into aof file instead of 0M.

结论是:aof重写的字节大小不是真的0,而是很小。原因是我测试程序的错误。

最佳答案

I think "AOF rewrite: 0 MB of memory used by copy-on-write" is the key, who will explain it?

它与 AOF 的结果大小完全无关。

Redis 是一个单线程事件循环。当它必须处理一个长时间运行的作业时,例如 RDB 转储或 AOF 重写,它会派生第二个进程来完成它。该作业将与未阻塞的 Redis 事件循环并行运行。该机制利用操作系统的虚拟内存子系统提供的写时复制功能。

当Redis fork时,内存页会被两个进程共享。但是在作业运行期间,Redis 仍然可以修改这些内存页(插入、更新、删除操作)。这些操作会被操作系统捕获,页面会以惰性模式复制,只有当它们被修改时。

结果是 Redis 在运行后台作业时会消耗或多或少的内存。如果发生大量的写操作,那么写时复制机制将消耗更多的内存。

“AOF 重写:写时复制使用的 xxx MB 内存”行仅提供了写时复制内存开销的评估。理想情况下,它应该是 0(意味着没有页面被复制)。如果您在后台运行期间开始写很多,它会增加。在最坏的情况下(不太可能),它可能接近 Redis 使用的总内存。

关于redis - 为什么redis aof重写0M到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17985058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com