使用 htop 或其他工具总结整个进程树的 CPU 负载

使用 htop 或其他工具总结整个进程树的 CPU 负载

我想查看 MS 团队创建的全部负载,其中有大量线程。

我已经尝试过树状视图,但 (1) 中的值未添加到 (2) 中

htop1 您能在 htop 或其他好用的工具中看到这个吗?

编辑使用“H”热键仍然不能总结所有内容

htop2

答案1

如果你需要一个可以做到这一点的工具,并经常更新信息htop可能没有答案。但是,如果您愿意执行命令并获取结果(作为快照),则有几个选项。

一种方法是处理“基本命令”的输出ps

$ ps -eo user,pid,ppid,pcpu,command

处理信息有两种方法。

简单的方法

grep使用给定命令的所有行,并总结pcpu用法。例如,对于firefox这个简单版本(您不需要pid,ppid

$ ps -eo pcpu,command --sort -pcpu | grep firefox | awk '{p=$1 ; sum +=p} END {print sum}'

该方法得出的结果可能与实际目标不符,原因是:

  1. 两个单独的进程具有相同的名称,高估了实际结果。有时您可能知道自己是否处于这种情况,如果是的话,可能不是一个问题。
  2. 子进程不受重视grep(我不确定这是否会发生),低估了实际结果。

以下方法可以解决这两个潜在问题。

完整方法

浏览进程树,从您感兴趣的目标进程的 PID(进程 ID,例如 10000)开始。然后,您将浏览grep所有其他具有 PPID(父进程 ID)10000 的进程,并记录它们的 PID。递归获取整个树,并将 的所有值相加pcpu

您必须为此编写一个小程序。我不确定此金额中包含的某些项目是否不包括在简单的方法多于。

笔记关于“基本命令”:

  1. 列出command(或cmdargs)很重要。列comm列出了进程名称,可能有所不同(请参阅)。例如,firefox启动许多Web Content进程,并且这挑逗 优秀的工具 atop+ P,例如
  2. 对于其他有趣的分析,您可以将其添加,size,%mem为要显示和处理的列。另请参阅下文。

内存方面的资源使用情况

有一场广泛的“讨论”这里,适用于内存使用情况。我不确定那里的任何说法是否适用于任何相似的方式(甚至考虑到 CPU 使用率与内存使用率的差异)。

有关的

  1. https://unix.stackexchange.com/questions/209689/sum-the-memory-usages-of-all-the-processes-of-a-program
  2. https://unix.stackexchange.com/questions/55148/top-htop-group-process-by-command/471925#471925
  3. https://www.networkworld.com/article/3516319/showing-memory-usage-in-linux-by-process-and-user.html

答案2

我现在偶然发现gotop默认视图中提供了该功能。

安装说明位于https://github.com/xxxserxxx/gotop

curl https://raw.githubusercontent.com/xxxserxxx/gotop/master/scripts/download.sh | bash && chmod +x gotop && sudo mv gotop /usr/local/bin/

由于这会将远程源传送到您的 shell,因此请确保先验证链接的内容。

启动后它看起来像这样。右下角的进程框总结了每个可执行文件的 CPU 负载和内存使用情况。

gotop 的屏幕截图,显示各团队的总 CPU 负载为 4.1%

答案3

根据 sancho.s 的回答,这对我来说足够公平了:

watch -n 1 'ps -eo pcpu,command --sort -pcpu | grep teams | awk "{p=\$1 ; sum +=p} END {print sum}"'

它每秒打印一次所有团队进程的 CPU 负载(附注:对我来说,它总是在 78% 左右,即使是空闲状态,这很疯狂,但与此无关)

或者我们可以生成一段时间内的 CPU 负载日志:

while sleep 1; do echo -n `date +"%H:%M:%S;" `; ps -eo pcpu,command --sort -pcpu | grep teams | awk "{p=\$1 ; sum +=p} END {print sum}"; done

相关内容