当前位置: 首页 > 面试题库 >

如何在python进程中限制内存使用

常英纵
2023-03-14
问题内容

我在具有16GB Ram和64位OS的Linux机器上运行Python
2.7。我编写的python脚本可能会将过多的数据加载到内存中,这使计算机的运行速度降低到我什至无法杀死进程的地步。

虽然可以通过以下方式限制内存:

ulimit -v 12000000

在运行脚本之前,请在外壳程序中添加一个限制选项。在我到处看的地方,该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)

什么也没有做。

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

编辑:对于任何好奇的人,使用subprocess.call都不起作用,因为它会创建一个(令人惊讶的惊喜!)新进程,该进程与当前python程序在其中运行的进程无关。


问题答案:

resource.RLIMIT_VMEM是对应ulimit -v的资源。

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

要注意的第二件事是ulimit/setrlimit仅影响当前过程及其将来的子级。

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

该模块不会尝试掩盖平台差异-未为平台定义的符号将无法从该平台上的该模块中获得。

根据上面链接的bash
ulimit来源
,它使用RLIMIT_ASifRLIMIT_VMEM未被定义。



 类似资料:
  • 问题内容: 我正在阅读Python内存管理,希望减少应用程序的内存占用。有人建议,子流程可以大大减轻该问题;但是我在概念上需要做些麻烦。可以请一个简单的例子说明如何解决这个问题。 …变成一个 真正的 子处理函数,该函数不存储额外的“自由列表”? 奖励问题: 这个“自由列表”概念也适用于python c扩展吗? 问题答案: 关于优化建议的重要事项是确保仅在子流程中调用该建议。该和是无关的- 一旦你在

  • 提前感谢你的帮助

  • 问题内容: 我正在尝试找到一种方法来限制Python VM可用的内存,就像Java VM中的选项“ -Xmx”一样。(这个想法是为了能够处理MemoryError异常) 我不确定该选项是否存在,但是可能存在使用操作系统命令“隔离”进程及其内存的解决方案。 谢谢。 问题答案: 在* nix上,您可以使用该命令,特别是-m(最大内存大小)和-v(虚拟内存)。

  • 我有一个tomcat服务器,可以处理一些rest API请求。这个tomcat崩溃是由于某些输入中的一个特定rest请求内存不足导致的,这会导致大量堆大小的使用,从而导致所有站点崩溃。 我想限制这个Rest请求内存使用我怎么能做到呢?我通常想保护tomcat免受大内存使用请求崩溃的影响。我怎么能做到呢?也许以某种方式限制所有线程最大堆大小?

  • 问题内容: 我想开始我与JVM OPTS应用:。当应用程序启动时,我通过键入来检查内存使用情况,发现vmsize超过600512 kB!比我的设置大得多。我想知道如何限制进程的jvm内存使用量。 问题答案: 您无法控制要控制的内容 ,只能控制Java Heap,它不能控制JVM 对 本机内存 的使用,JVM的使用根据实现而完全不同。 从下面的文章中感谢内存(了解JVM如何在Windows和Linu

  • 本文向大家介绍cgroup限制mongodb进程内存大小,包括了cgroup限制mongodb进程内存大小的使用技巧和注意事项,需要的朋友参考一下 以限制mongodb的内存大小为例。 通过cgroup限制后,当内存达到限额,进程会被kill。 数据查询脚本: 数据插入脚本: