2013-03-26 109 views
3

我在MacOS上的Python进程完全忽略了我设置的rlimits。 (我通过打印确认它们已被设置)MacOS上的Python完全忽略rlimit

物理内存使用率高于2.4Gb,此时CPU使用率下降5%并且挂起。 (潜在的罪魁祸首似乎是numpy数组的分配,但我不能强制一个OutOfMemory例外,以查明在哪里,所以我卡住了)。这是怎么回事?我认为硬性限制不容忽视?

编辑:它发生在我身上,违规分配不是在本机Python中完成的,但在numpy或scikit-learn。链接到source of cpython:Modules/resource.c如果是这样,那将是一个确定的docbug。

import resource 
resource.setrlimit(resource.RLIMIT_AS, (1*1048576L, 1.2*1048576L)) 
resource.setrlimit(resource.RLIMIT_DATA, (1*1048576L, 1.1*1048576L)) 
resource.setrlimit(resource.RLIMIT_STACK, (100000, 120000)) 

版本:在MacOS 10.8.2,py27-numpy的python2.7.3(MacPorts的,64b)。

机器有4Gb物理RAM。

回答

0

在我看来,违规分配不是在本地Python中完成的,而是在numpy或scikit-learn中。 我的分配代码可能会将内存泄漏到临时对象。将调查。可能需要看看gc

如果是这样的话,那听起来像是一个关于resource的docbug。

链接到source of cpython:Modules/resource.c