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

发布于 2024-09-26 00:52:21 字数 188 浏览 2 评论 0原文


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

I'm developing an application in Python on Ubuntu and I'm running external binaries from within python using subprocess. Since these binaries are generated at run time and can go rogue, I need to keep a strict tab on the amount of memory footprint and runtime of these binaries. Is there someway I can limit or monitor the memory usage of these binary programs at runtime? I would really hate to use something like "ps" in subprocess for this purpose.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烂柯人 2024-10-03 00:52:21

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

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

You can use Python's resource module to set limits before spawning your subprocess.

For monitoring, resource.getrusage() will give you summarized information over all your subprocesses; if you want to see per-subprocess information, you can do the /proc trick in that other comment (non-portable but effective), or layer a Python program in between every subprocess and figure out some communication (portable, ugly, mildly effective).

深者入戏 2024-10-03 00:52:21

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

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

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

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

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

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

Having a PID number of your subprocess you can read all info from proc file-system. Use:

/proc/[PID]/smaps (since Linux
2.6.14)
This file shows memory consumption for each of the process's mappings.
For each of mappings there is a series
of lines as follows:

or

/proc/[PID]/statm
Provides information about memory usage, measured in pages.

Alternatively you can limit resources which subprocess can aquire with :

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

When given virtual memory limit is reached process fails with out of memory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文