4

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

物理内存使用率超过 2.4Gb,此时 CPU 使用率下降 << 5% 并挂起。(潜在的罪魁祸首似乎是 numpy 数组分配,但我不能强制OutOfMemory异常来查明在哪里,所以我被卡住了)。这是怎么回事?我认为硬 rlimits 不能被忽略?

编辑:在我看来,有问题的分配不是在本机 Python 中完成的,而是在 numpy 或scikit-learn中完成的。链接到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 上的 python2.7.3(macports,64b),py27-numpy。

机器具有 4Gb 物理 RAM。

4

1 回答 1

0

我突然想到,有问题的分配不是在本机 Python 中完成的,而是在 numpy 或scikit-learn中完成的。我的分配代码可能会将内存泄漏给临时对象。会调查。可能需要查看gc

如果是这种情况,那听起来像是 resource 上的docbug

链接到cpython 的源代码:Modules/resource.c

于 2013-03-28T22:41:55.603 回答