首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测量多个并行进程的累积峰值内存使用量

问测量多个并行进程的累积峰值内存使用量
EN

Unix & Linux用户
提问于 2020-04-25 22:21:42
回答 1查看 392关注 0票数 4

假设我使用xargs并行运行了一堆进程,并希望测量它们的累积峰值内存使用量。我如何在Linux中做到这一点?GNU时间只测量我运行的单个进程的峰值RSS。换句话说,如果每个进程都消耗了M内存,并且运行了N个内存,我希望看到N*M作为结果,而不是GNU时间给出的M。

EN

回答 1

Unix & Linux用户

发布于 2021-09-04 11:06:12

您感兴趣的是每个进程的峰值内存使用量之和,还是进程内存使用总量的峰值?

例如,要获得系统中最大的5大开销的峰值驻留内存使用率,您可以这样做:

代码语言:javascript
复制
$ printf "PID\tPeak RSS usage (kB)\n"; grep VmHWM: /proc/*/status | sort -rnk2 | head -n 5 | perl -npe 's#^/proc/(\d+)/\S+\s+(\d+) kB$#$1\t$2#'
PID Peak RSS usage (kB)
19799   8515140
28243   930620
1357    911612
19833   766020
17926   734952

这将列出5个进程历史上内存使用量最大的进程。但是,很常见的情况是,这些进程没有在同一时刻达到峰值,因此这些进程的和峰值可能比所有进程的峰值之和低得多。

唯一确定的方法是在多个进程上计算进程内存使用总量的峰值,即在一个单独的内存cgroup中运行该进程集合。理论上,您只需使用systemd-run --pipe --user --pty ...运行程序,然后监视该内存cgroup的峰值内存使用情况。但是,在我的经验中,systemd-run没有正确地实现瞬态用户模式组,因此您必须创建单独的系统级cgroup来包含您想要测量的组,然后在该组中启动您的进程树。如果您使用最近的systemd-run运行了足够多的发行版,而不是我尝试过的,那么它可能在没有任何黑客攻击的情况下工作。详情请参见https://stackoverflow.com/a/61916151/334451。您可以通过内存cgroup挂载检查结果,该挂载通常安装在/sys/fs/cgroup以下的某个地方。可能的位置包括子目录memory或unified。有关详细信息,请访问mount | grep cgroup。您的结果可能是memory.max_usage_in_bytes,但我认为这是已提交的使用,而不是实际的驻留内存使用-您没有指定您要寻找哪一个。有关其他统计信息,请参阅内存cgroup中的D15。

如果您使用瞬态内存cgroup,您可能希望运行长sleep命令作为最后一个进程,以确保在进程树完成后删除cgroup之前,您有足够的时间读取峰值内存使用情况。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/582528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档