如何限制堆大小?

我有时会编写Python程序,这些程序在执行之前很难确定它将使用多少内存。 因此,我有时会调用一个Python程序,试图分配大量的RAM,导致内核大量交换并降低其他正在运行的进程的性能。

因此,我希望限制一个Python堆可以增长的内存。 达到限制时,程序可能会崩溃。 什么是最好的方法来做到这一点?

如果它很重要,那么在Cython中编写很多代码,所以它应该考虑在那里分配的内存。 我没有嫁给一个纯粹的Python解决方案(它不需要可移植),所以在Linux上工作的任何东西都可以。


查看resource.setrlimit()。 它只适用于Unix系统,但它看起来可能就是你要找的东西,因为你可以使用resource.RLIMIT_DATA参数为你的进程和进程的子进程选择一个最大的堆大小。

编辑:添加一个例子:

import resource

rsrc = resource.RLIMIT_DATA
soft, hard = resource.getrlimit(rsrc)
print 'Soft limit starts as  :', soft

resource.setrlimit(rsrc, (1024, hard)) #limit to one kilobyte

soft, hard = resource.getrlimit(rsrc)
print 'Soft limit changed to :', soft

我不确定你的用例是什么,但是你可能需要限制栈的大小,而不是使用resouce.RLIMIT_STACK。 超过此限制会向您的进程发送一个SIGSEGV信号,为了处理它,您需要使用setrlimit Linux联机帮助页中所述的备用信号堆栈。 不过,我不确定sigaltstack是否在python中实现,所以如果你想从这个边界恢复过来可能会很困难。


看看ulimit。 它允许设置资源配额。 可能还需要适当的内核设置。

链接地址: http://www.djcxy.com/p/79833.html

上一篇: How to limit the heap size?

下一篇: Why can't we allocate dynamic memory on the stack?