Linux mmap与ENOMEM一起失败
我在我们的应用程序中使用Linux mmap与ENOMEM一起失败,linux,unix,mmap,Linux,Unix,Mmap,我在我们的应用程序中使用mmap(): mmap(NULL, get_size(), PROT_NONE, MAP_ANONYMOUS | MAP_SHARED, -1, 0); 但我的目的只是保留get_size()特定的内存量,但我不打算使用它。有时,我看到这个mmap()在ENOMEM中失败。问题是为什么mmap()在这里使用ENOMEM失败,而我们只是尝试保留地址空间,而不是尝试实际使用它。这是因为MAP\u SHARED?进程的虚拟内存大小有一个限制,您可以通过ulimit-v看
mmap()
:
mmap(NULL, get_size(), PROT_NONE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
但我的目的只是保留
get_size()
特定的内存量,但我不打算使用它。有时,我看到这个mmap()
在ENOMEM中失败。问题是为什么mmap()
在这里使用ENOMEM
失败,而我们只是尝试保留地址空间,而不是尝试实际使用它。这是因为MAP\u SHARED
?进程的虚拟内存大小有一个限制,您可以通过ulimit-v
看到这个限制。如果达到该限制,可以尝试使用ulimit-v unlimited
将其删除。您还可以使用POSIX函数以编程方式获取和设置限制
系统默认和硬限制在/etc/security/limits.conf
和目录/etc/security/limits.d
中的文件中设置
mmap
使用ENOMEM
失败的另一个原因是超过了由vm控制的进程的最大内存映射数。sysctl
的max\u map\u count
配置选项对进程的虚拟内存大小有一个限制,可以通过ulimit-v
看到。如果达到该限制,可以尝试使用ulimit-v unlimited
将其删除。您还可以使用POSIX函数以编程方式获取和设置限制
系统默认和硬限制在/etc/security/limits.conf
和目录/etc/security/limits.d
中的文件中设置
mmap
使用ENOMEM
失败的另一个原因是超过了由vm控制的进程的最大内存映射数。sysctl
的max\u map\u count
配置选项传递给mmap
的大小是多少?使用map-x
转储进程内存映射,并将其发布到此处。传递给mmap
的大小是多少?使用map-x
转储进程内存映射,并将其发布到此处。