在Python中检查子进程的内存使用情况

Neo*_*Neo 9 python subprocess


我正在Ubuntu上用Python开发一个应用程序,我正在使用子进程在python中运行外部二进制文件.由于这些二进制文件是在运行时生成的并且可能变得流氓,因此我需要对这些二进制文件的内存占用量和运行时间保持严格的标签.有没有我可以在运行时限制或监视这些二进制程序的内存使用情况?为了这个目的,我真的很讨厌在子进程中使用类似"ps"的东西.

Hab*_*bie 11

您可以使用Python的资源模块在生成子流程之前设置限制.

对于监控,resource.getrusage()会给你总结了所有的子进程的信息; 如果你想每个子进程的信息看,你可以做其他评论(非便携式但有效)在/ proc伎俩,或在每个子流程的层间的Python程序,并找出一些通信(便携式的,丑陋的,温和有效).


ger*_*tas 5

有了子进程的PID号,您可以从proc文件系统中读取所有信息。使用:

/ proc / [PID] / smaps(从Linux 2.6.14开始)此文件显示每个进程映射的内存消耗。对于每个映射,都有以下几行:

要么

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

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

subprocess.Popen('ulimit -v 1024; ls', shell=True)
Run Code Online (Sandbox Code Playgroud)

当达到给定的虚拟内存限制时,进程将失败,并显示内存不足。

  • ulimit已过时。摘自手册页:“警告:此例程已过时。请改用getrlimit(2),setrlimit(2)和sysconf(3)。” (2认同)