可以使用多少内存

sol*_*wzs 53 linux-kernel

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

sysctl -w vm.max_map_count=65535
Run Code Online (Sandbox Code Playgroud)

我想知道数字65535的含义以及设置可以使用多少内存.

thk*_*ala 86

Linux内核文档:

max_map_count:

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

虽然大多数应用程序需要少于一千个映射,但某些程序(尤其是malloc调试器)可能会消耗大量的映射,例如每个分配最多一个或两个映射.

默认值为65536.

底线:此设置限制了离散映射内存区域数量 - 它本身对这些区域的大小或进程可用的内存没有限制.

是的,这个:

sysctl -w vm.max_map_count=65535
Run Code Online (Sandbox Code Playgroud)

这是一个更好的写作方式:

echo 65535 > /proc/sys/vm/max_map_count
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下,如果增加默认值会带来什么负面影响? (9认同)
  • @user1767754 https://www.suse.com/support/kb/doc/?id=000016692 (5认同)
  • @ user9074332,这实际上是不正确的。两种更改方式(“ sysctl -w”和“ echo> / proc / sys / *”)都不是持久的。为了使更改持久化,您应该修改`/ etc / sysctl.conf`,然后(可选)执行`sysctl -p`以应用更改而无需重新启动。 (3认同)

田咖啡*_*田咖啡 11

echo 'vm.max_map_count=262144' >> /etc/sysctl.conf

sysctl -p
Run Code Online (Sandbox Code Playgroud)


小智 6

echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
Run Code Online (Sandbox Code Playgroud)

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

echo vm.max_map_count=262144 | sudo tee -a /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

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

grep vm.max_map_count /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)