【发布时间】:2015-10-03 10:40:11
【问题描述】:
我在 Redis Google Group 中找到了以下论坛帖子:Verify Redis on Windows memory consumption,以及一些 Microsoft Open Tech 团队成员表示:
为了实现持久化,模拟fork() 写时复制机制,Redis 的 Windows 端口将 Redis 堆在可以与子进程共享的内存映射文件中。 数据肯定存储在内存中,但由于内存映射 文件工作集将在“共享工作集”下进行说明 而不是“私人工作集”。您可以检查共享工作 使用任务管理器或 Windows 性能的一组 redis-server.exe 监视器。您应该看到更接近反映的值 “用过的记忆人”
我为什么要问这个问题?因为我发现redis-server 进程占用的内存比info 命令说的要少得多(例如,info 显示 Redis 正在使用 148MB 而共享工作集在任务管理器中显示为 48MB)。
既然 MSOpenTech 成员说 Redis for Windows 使用的是内存映射文件,这是否意味着 Windows 上的 Redis 使用的 RAM 比 Linux 版本少?。
【问题讨论】:
-
没有。注释只是说,Windows 中的 ram 使用情况与 linux 中的不同。
-
@MarcB 是的,但是内存映射文件映射到虚拟内存,所以可能不是所有内存都在 RAM 中,而是在磁盘中。
-
没有必要将文件映射到虚拟内存中......这将使用磁盘,文件已经存储在其中。
-
@MarcB 你确定吗?例如,关于 MMP 的 Wikipedia 文章指出:内存映射文件是一段虚拟内存,已被分配与文件或类似文件资源的某些部分的直接逐字节关联。
-
memmapping 将文件的内容分配到 ram 中的物理位置,这可能不需要对应于实际的物理 ram,所以是的,因此它是“虚拟的”。但“虚拟内存”是使用磁盘空间创建的额外“内存空间”
标签: linux windows memory redis memory-mapped-files