【问题标题】:Check memory usage of subprocess in Python在 Python 中检查子进程的内存使用情况
【发布时间】:2010-09-30 12:56:15
【问题描述】:


我正在 Ubuntu 上用 Python 开发一个应用程序,我正在使用子进程从 python 中运行外部二进制文件。由于这些二进制文件是在运行时生成的并且可能会变得不正常,因此我需要严格控制这些二进制文件的内存占用量和运行时间。有没有办法可以在运行时限制或监控这些二进制程序的内存使用情况?为此,我真的很讨厌在子进程中使用“ps”之类的东西。

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    您可以使用 Python 的 resource 模块在生成子进程之前设置限制。

    对于监控,resource.getrusage() 将为您提供所有子流程的汇总信息;如果你想查看每个子进程的信息,你可以在其他注释中使用 /proc 技巧(不可移植但有效),或者在每个子进程之间分层一个 Python 程序并找出一些通信(便携,丑陋,温和有效)。

    【讨论】:

      【解决方案2】:

      拥有子进程的 PID 号,您可以从 proc file-system 读取所有信息。使用:

      /proc/[PID]/smaps(从 Linux 2.6.14) 此文件显示每个进程映射的内存消耗。 每个映射都有一个系列 行数如下:

      /proc/[PID]/statm 提供有关内存使用情况的信息,以页为单位。

      或者,您可以限制子进程可以获取的资源:

      subprocess.Popen('ulimit -v 1024; ls', shell=True)
      

      当达到给定的虚拟内存限制时,进程因内存不足而失败。

      【讨论】:

      • 我需要在 Python 中实现它。所以我需要 fork 一个子进程,同时运行一个 while 循环来持续监控 /proc/(pid)/smaps 文件。没有其他方法吗,例如:我可以为子子进程分配固定内存?我希望以某种方式使用 python 的内存管理器。
      • 该死,没想到这个。是的,这对我来说应该很好。
      • ulimit 已过时。手册页摘录:“警告:此例程已过时。请改用 getrlimit(2)、setrlimit(2) 和 sysconf(3)。”
      猜你喜欢
      • 2012-11-16
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2013-04-25
      相关资源
      最近更新 更多