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

RX1*_*X14 6 linux crystal-lang

我正在运行一个使用 mmap 分配 8mb 堆栈的程序。在测试我可以分配多少个堆栈时(目标是 100,000 个),我发现虚拟内存大小按预期快速增加,并且保留大小保持较小(小于 1GB)。然后程序出现段错误Cannot allocate new fiber stack: Cannot allocate memory (Errno)。使用gdb挽救段错误然后查看 htop,我发现这种情况发生在大约 256GB 的虚拟内存上。

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

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

小智 6

也许你已经达到了最大值/proc/sys/vm/max_map_count。此设置设置进程可以拥有的 mmap 数量的最大值。默认值是 65536。所以很可能不是你想要 malloc 的内存大小,而是导致错误的 malloc 调用次数Cannot allocate memory。

您可以尝试通过以下方式增加最大值:

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

另请参阅NPTL 将最大线程数限制为 65528?