2010-09-30 33 views
8


我正在Ubuntu上开发一个Python应用程序,我正在Python中使用子进程运行外部二进制文件。由于这些二进制文件是在运行时生成的并且可能变得流氓,所以我需要对这些二进制文件的内存占用量和运行时间保持严格的选项卡。有没有办法在运行时限制或监视这些二进制程序的内存使用情况?我真的很讨厌在子过程中使用类似“ps”的东西来达到这个目的。检查Python中子进程的内存使用情况

回答

4

有一个你的子进程的PID号码,你可以阅读从proc file-system所有信息。使用:

的/ proc/[PID]/smaps(因为Linux 2.6.14) 此文件显示内存消耗用于每个进程的映射。 对于每个映射的有线的串联 如下:

的/ proc/[PID]/statm 提供有关内存使用情况,在页测得的信息。

另外,您可以限制哪些子可以AQUIRE资源:

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

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

+1

我需要在Python中实现它。所以我需要fork一个子进程,同时运行一个while循环来监视/ proc /(pid)/ smaps文件。是不是有其他方式,例如:我可以为子进程分配固定内存?我希望以某种方式使用python的内存管理器。 – Neo 2010-09-30 13:15:31

+0

当时,从来没有想到这一点。是的,这对我来说应该很好。 – Neo 2010-09-30 13:57:41

+2

ulimit已过时。摘自手册页:“警告:此例程已过时,请改为使用getrlimit(2),setrlimit(2)和sysconf(3)。”感谢哈比, – omikron 2016-10-07 11:25:21

10

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

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

+0

,这就是我所需要的。 – Neo 2010-09-30 13:41:50

相关问题