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)