【问题标题】:Increase maximum virtual memory size above 256gb将最大虚拟内存大小增加到 256gb 以上
【发布时间】:2016-12-21 17:00:48
【问题描述】:

我正在运行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,但似乎没有什么不同。

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

【问题讨论】:

    标签: linux crystal-lang


    【解决方案1】:

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

    您可以尝试增加最大值:

    sysctl -w vm.max_map_count=131070
    

    另见NPTL caps maximum threads at 65528?

    【讨论】:

    • 这确实是极限,我将其增加到 1000 万,并且在 Crystal 中获得了超过 500 万根光纤。谢谢!
    【解决方案2】:

    我会检查您的交换文件大小。如果你的交换用完了,那么在你修复它之前,所有这些参数更改都不会帮助你。

    我会重新创建故障并运行 free -h 以查看是否有任何未使用的交换。如果一切都消失了,您将需要增加交换大小。

    【讨论】:

    • 我有 16GB 的内存并且没有交换空间,但我仍然可以分配 256GB 的虚拟内存。我不认为交换是这里的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 2011-03-25
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2013-06-13
    • 2018-07-27
    • 2018-03-16
    相关资源
    最近更新 更多