【问题标题】:Does Redis Windows fork use less RAM because is using memory-mapped files?Redis Windows fork 是否因为使用内存映射文件而使用更少的 RAM?
【发布时间】: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


【解决方案1】:

对于那些在 2016 年晚些时候提出这个问题的人,打开 Process Hacker(进程资源管理器)并查看/添加列 Working Set

那里显示的内存使用情况与 Redis 实际使用的内容有关。

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2012-02-08
    • 2010-11-01
    • 2013-02-17
    • 2021-02-08
    相关资源
    最近更新 更多