我正在Ubuntu上用Python开发一个应用程序,我正在使用子进程在python中运行外部二进制文件。由于这些二进制文件是在运行时生成的并且可能变得流氓,因此我需要对内存占用量和这些二进制文件的运行时间保持严格的标签。有没有我可以在运行时限制或监视这些二进制程序的内存使用情况?为了这个目的,我真的很讨厌在子进程中使用类似“ps”的东西。
答案 0 :(得分:10)
您可以使用Python的resource模块在生成子流程之前设置限制。
对于监视,resource.getrusage()将为您提供有关所有子进程的摘要信息;如果你想查看每个子进程信息,可以在其他注释中执行/ proc技巧(非可移植但有效),或者在每个子进程之间分层Python程序并找出一些通信(可移植,丑陋,温和有效) )。
答案 1 :(得分:4)
拥有子流程的PID编号,您可以阅读proc file-system中的所有信息。使用:
/ proc / [PID] / smaps(自Linux 2.6.14) 此文件显示每个进程映射的内存消耗。 对于每个映射,都有一系列 线条如下:
或
的/ proc / [PID] / statm 提供有关内存使用情况的信息,以页为单位。
或者,您可以限制子流程可以获取的资源:
subprocess.Popen('ulimit -v 1024; ls', shell=True)
当达到虚拟内存限制时,进程因内存不足而失败。