限制内存使用

我在一台16GB RAM和64位操作系统的Linux机器上运行Python 2.7。 我写的一个python脚本可以把太多的数据加载到内存中,这会使机器变慢,甚至不能再杀死进程。

虽然我可以通过调用来限制内存:

ulimit -v 12000000 

在运行脚本之前在我的shell中,我想在脚本中包含一个限制选项。 在我看来, resource模块被认为具有与ulimit相同的权力。 但是打电话:

 import resource _, hard = resource.getrlimit(resource.RLIMIT_DATA) resource.setrlimit(resource.RLIMIT_DATA, (12000, hard)) 

在我的脚本开始什么都没有。 即使设置低至12000的值也不会使程序崩溃。 我也尝试了与RLIMIT_STACK相同的结果。 奇怪的是,呼吁:

 import subprocess subprocess.call('ulimit -v 12000', shell=True) 

什么都不做。

我究竟做错了什么? 我在网上找不到任何实际使用的例子。

resource.RLIMIT_VMEMulimit -v对应的资源。

RLIMIT_DATA 只影响brk/sbrk系统调用,而较新的内存管理器倾向于使用mmap

第二件要注意的事情是ulimit / setrlimit只影响当前进程及其未来的子进程。

关于AttributeError: 'module' object has no attribute 'RLIMIT_VMEM'消息: resource模块文档提到了这种可能性:

该模块不会尝试屏蔽平台差异 – 在该平台上的该模块将无法使用未定义的平台符号。

根据上面链接的bash ulimit源代码 ,如果RLIMIT_VMEM ,则使用RLIMIT_VMEM