【发布时间】:2012-07-27 08:06:47
【问题描述】:
我阅读了Understanding Virtual Memory 文档,它说在 Linux VM 中更改可调参数的一种方法是命令:
sysctl -w vm.max_map_count=65535
我想知道 65535 这个数字是什么意思,以及这个设置 vm 可以使用多少内存。
【问题讨论】:
标签: linux-kernel
我阅读了Understanding Virtual Memory 文档,它说在 Linux VM 中更改可调参数的一种方法是命令:
sysctl -w vm.max_map_count=65535
我想知道 65535 这个数字是什么意思,以及这个设置 vm 可以使用多少内存。
【问题讨论】:
标签: linux-kernel
来自the Linux kernel documentation:
max_map_count:
此文件包含一个进程的最大内存映射区域数 可能有。内存映射区域用作调用的副作用 malloc,直接通过 mmap 和 mprotect,以及在加载共享时 图书馆。
虽然大多数应用程序需要不到一千张地图,但某些 程序,尤其是 malloc 调试器,可能会消耗大量它们, 例如,每个分配最多一到两个映射。
默认值为 65536。
底线:此设置限制了离散映射内存 areas 的 number - 就其本身而言,它对那些 size 没有限制进程可用的区域或内存。
是的,这个:
sysctl -w vm.max_map_count=65535
只是写这个更好的方式:
echo 65535 > /proc/sys/vm/max_map_count
【讨论】:
sysctl 方法是应用此内核更改的持久方式。使用echo 方法,内存设置将在节点回收后恢复为原始值。如果更改为非默认值,请注意。
sysctl -w 和 echo > /proc/sys/*)都不是持久的。要使更改持久化,您应该修改/etc/sysctl.conf,然后(可选)执行sysctl -p 以应用更改而无需重新启动。
echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
sysctl -p
【讨论】:
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
【讨论】: