您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Python中使用psutil获得程序的最大内存使用率

如何在Python中使用psutil获得程序的最大内存使用率

<defunct>表示该子进程一个僵尸进程(已死,但其父级(p.poll()p.wait())尚未读取其状态)。这似乎都psutilps节目RSS是这样的过程为零。

结果取决于子流程是否比p.memory_info()调用的更早退出。这是一场比赛。如果您在C ++程序的出口处添加了延迟,则p.memory_info()可能在子进程退出之前被调用,并且您应该获得非零的结果。

问题是我可以得到任意程序进行评估。语言也不是固定的。没有解决这个问题的优雅方法吗?

您可能需要操作系统支持才能保存有关子进程内存使用情况的信息,即使该进程退出后也是如此。或者,您可以使用诸如的内存分析器运行该程序valgrind并读取其结果。收集结果:

$ valgrind --tool=massif cmd arg1 arg2

要查看结果,可以使用ms_print

$ ms_print massif.out.* | less

或GUI Massif- Visualizer

@mdadm建议了一个更简单的解决方案:time命令

from subprocess import Popen, PIPE

p = Popen(['time', '-f', '%M'] + args, stderr=PIPE)
ru_maxRSS = int(p.communicate()[1])
print("Maximum RSS %d KB" % ru_maxRSS)

GNU时间用于wait3()填充资源使用情况信息(如果可用)。可以在Python中调用

import os
from subprocess import Popen

p = Popen(args)
ru = os.wait4(p.pid, 0)[2]
print("Maximum RSS %d KB" % ru.ru_maxRSS)

我已经比较了psutil.Process.memory_infoRSSru_maxRSS返回os.wait4的最大值,和返回的值以及通过报告的最大总内存valgrind --tool=massif它们是相似的

python 2022/1/1 18:48:04 有333人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶