检查Python中子进程的内存使用情况
我正在Ubuntu上用Python开发一个应用程序,并且我通过一个叫做subprocess的工具在Python里运行外部程序。这些外部程序是在运行时生成的,有时候它们可能会出现问题,所以我需要严格监控它们使用的内存和运行时间。有没有什么方法可以在它们运行时限制或监控这些程序的内存使用呢?我真的不想为了这个目的去用像“ps”这样的命令。
2 个回答
14
你可以使用Python的resource模块来设置限制,这样在启动子进程之前就能控制资源使用。
如果你想监控这些子进程,resource.getrusage()可以给你一个所有子进程的汇总信息;如果你想查看每个子进程的具体信息,可以使用评论里提到的/proc方法(虽然不太通用,但效果不错),或者在每个子进程之间加一个Python程序来进行一些通信(这种方法通用,但有点麻烦,效果一般)。
6
如果你有一个子进程的PID号码,你就可以从proc文件系统中读取所有信息。你可以使用以下命令:
/proc/[PID]/smaps(从Linux 2.6.14开始)
这个文件显示了每个进程的内存使用情况。对于每个映射,它会列出一系列的行,内容如下:
或者你可以使用:
/proc/[PID]/statm
这个文件提供了关于内存使用的信息,单位是页。
另外,你还可以限制子进程可以获取的资源,方法是:
subprocess.Popen('ulimit -v 1024; ls', shell=True)
当达到设定的虚拟内存限制时,进程会因为内存不足而失败。