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

Linux 将最大虚拟内存大小增加到256gb以上,linux,crystal-lang,Linux,Crystal Lang,我正在运行一个程序。在测试我可以分配多少堆栈(目标是100000)时,我看到虚拟内存大小像预期的那样快速增长,而保留的大小保持较小(小于1gb)。然后,程序将故障与隔离,无法分配新光纤堆栈:无法分配内存(Errno)。使用gdb解救segfault,然后查看htop,我发现这种情况发生在256GB左右的虚拟内存中 我试过在运行程序时使用prlimit--as=unlimited--rss=unlimited--memlock=unlimited--data=unlimited,但似乎没有什么不同

我正在运行一个程序。在测试我可以分配多少堆栈(目标是100000)时,我看到虚拟内存大小像预期的那样快速增长,而保留的大小保持较小(小于1gb)。然后,程序将故障与
隔离,无法分配新光纤堆栈:无法分配内存(Errno)
。使用
gdb
解救segfault,然后查看htop,我发现这种情况发生在256GB左右的虚拟内存中

我试过在运行程序时使用
prlimit--as=unlimited--rss=unlimited--memlock=unlimited--data=unlimited
,但似乎没有什么不同


有没有办法提高这个限制?增加这个限额是否明智?crystal有更好的方法分配堆栈吗?

我会检查您的交换文件大小。如果您的交换空间用完了,那么所有这些参数的更改都不会对您有所帮助,除非您解决了这个问题


我将重新创建失败并运行free-h,以查看是否有未使用的交换。如果这一切都消失了,你将需要增加你的交换规模

也许您达到了
/proc/sys/vm/max\u map\u count
的最大值。此设置设置了进程可以拥有的最大MMAP数。默认值为65536。因此,很可能不是要malloc的内存大小,而是导致错误
无法分配内存的malloc调用数

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

sysctl -w vm.max_map_count=131070

另请参见

我有16GB的ram,没有交换空间,但我仍然可以分配256GB的虚拟内存。我不认为交换是这里的问题。这确实是一个限制,我将它增加到1000万,并且有超过500万光纤进入晶体。谢谢