将最大虚拟内存大小增加到256gb以上

时间:2016-12-21 17:00:48

标签: linux crystal-lang

我正在运行allocates 8mb stacks using mmap的程序。在测试我可以分配多少堆栈(目标为100,000)时,我看到虚拟内存大小如预期般快速上升,并且保留的大小保持很小(小于1GB)。然后该程序与Cannot allocate new fiber stack: Cannot allocate memory (Errno)进行段错误。使用gdb拯救段错误然后查看htop,我发现这种情况发生在大约256GB的虚拟内存中。

我在运行程序时尝试使用prlimit --as=unlimited --rss=unlimited --memlock=unlimited --data=unlimited,但似乎没有什么区别。

有没有办法增加这个限制?是否可以增加此限制?水晶分配堆栈有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

也许你的命中率最高为/proc/sys/vm/max_map_count。此设置设置进程可以拥有的mmaps数的最大值。默认值为65536.因此,它可能不是您想要malloc的内存大小,而是导致错误Cannot allocate memory的malloc调用的数量。

您可以尝试使用以下方法增加最大值:

sysctl -w vm.max_map_count=131070

另见NPTL caps maximum threads at 65528?

答案 1 :(得分:1)

我检查你的交换文件大小。如果你的交换耗尽,那么所有这些参数更改都无法帮助你,直到你修复它。

我重新创建失败并运行free -h以查看是否有任何未使用的交换。如果它全部消失了你将需要增加你的交换大小。