【问题标题】:How much memory could vm usevm可以使用多少内存
【发布时间】:2012-07-27 08:06:47
【问题描述】:

我阅读了Understanding Virtual Memory 文档,它说在 Linux VM 中更改可调参数的一种方法是命令:

sysctl -w vm.max_map_count=65535

我想知道 65535 这个数字是什么意思,以及这个设置 vm 可以使用多少内存。

【问题讨论】:

  • 我知道 65535 是默认值,我想知道我应该如何计算虚拟机可以使用的实际内存
  • 嗨,在这里找到了一些东西 - Article 它写在那里 256MB。
  • 我认为这里不能简单地说 256MB,因为在我的系统上 vm.max_map_count=65535,但是我的 erlang vm 使用了大约 8GB 内存并且没问题
  • 这应该是我上面提到的文章的来源Source - 我真的不明白你在上面评论中的意思
  • 它不能直接确定一个进程可以使用多少内存。一个进程可以分配内存,比如说 64Kb 块或 256Kb 块,使用的总内存是 4 倍。 vm.max_map_count 只控制这些块的数量..

标签: linux-kernel


【解决方案1】:

来自the Linux kernel documentation

max_map_count:

此文件包含一个进程的最大内存映射区域数 可能有。内存映射区域用作调用的副作用 malloc,直接通过 mmap 和 mprotect,以及在加载共享时 图书馆。

虽然大多数应用程序需要不到一千张地图,但某些 程序,尤其是 malloc 调试器,可能会消耗大量它们, 例如,每个分配最多一到两个映射。

默认值为 65536。

底线:此设置限制了离散映射内存 areasnumber - 就其本身而言,它对那些 size 没有限制进程可用的区域或内存。

是的,这个:

sysctl -w vm.max_map_count=65535

只是写这个更好的方式:

echo 65535 > /proc/sys/vm/max_map_count

【讨论】:

  • 看来我误解了 vm.max_map_count 的意思
  • 可能还有其他有趣的信息:ynuxtechblog.wordpress.com/2016/01/05/…
  • 您能否解释一下,如果增加默认值可能会产生什么负面影响?
  • 不仅仅是一种“更好的方式”,sysctl 方法是应用此内核更改的持久方式。使用echo 方法,内存设置将在节点回收后恢复为原始值。如果更改为非默认值,请注意。
  • @user9074332,这实际上不是真的。两种更改方式(sysctl -wecho > /proc/sys/*)都不是持久的。要使更改持久化,您应该修改/etc/sysctl.conf,然后(可选)执行sysctl -p 以应用更改而无需重新启动。
【解决方案2】:
echo 'vm.max_map_count=262144' >> /etc/sysctl.conf

sysctl -p

【讨论】:

    【解决方案3】:
    echo "vm.max_map_count=262144" >> /etc/sysctl.conf
    sysctl -p
    

    这不起作用,因为我们无法直接更改配置文件。 运行以下命令。

    echo vm.max_map_count=262144 | sudo tee -a /etc/sysctl.conf
    

    但是检查vm.max_map_count 是否已经存在。您可以使用

    grep vm.max_map_count /etc/sysctl.conf
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2020-03-12
      • 2013-06-01
      • 2011-08-27
      相关资源
      最近更新 更多