在 htop 或其他工具中总结完整进程树的 CPU 负载

Ale*_*lex 5 cpu-load htop

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

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

顶部1 这可以在 htop 或其他不错的工具中看到吗?

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

顶2

san*_*lio 3

如果您需要一个工具来执行此操作,并经常将信息更新为htop,则可能没有答案。但是,如果您可以执行命令并获取结果(作为快照),则有几个选项。

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

$ ps -eo user,pid,ppid,pcpu,command
Run Code Online (Sandbox Code Playgroud)

有两种处理信息的方法。

简单的方法

grep具有给定命令的所有行以及总pcpu使用量。例如,对于firefox这个简单的版本(你不需要pid,ppid

$ ps -eo pcpu,command --sort -pcpu | grep firefox | awk '{p=$1 ; sum +=p} END {print sum}'
Run Code Online (Sandbox Code Playgroud)

由于以下原因,此方法可能给出的结果可能偏离实际目标:

  1. 两个独立的进程同名,高估了实际结果。有时您可能知道自己是否处于这种情况,如果是的话,这可能不是问题。
  2. 子进程未执行grepped(我不确定这是否会发生),低估了实际结果。

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

完整方法

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

您必须为此编写一个小程序。我不确定这笔金额中包含的某些项目是否不会以上述简单方式包含在内。

“基本命令”注意事项:

  1. 列出command(或cmd, args)很重要。列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


Ale*_*lex 0

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

watch -n 1 'ps -eo pcpu,command --sort -pcpu | grep teams | awk "{p=\$1 ; sum +=p} END {print sum}"'
Run Code Online (Sandbox Code Playgroud)

它每秒打印所有团队进程的 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
Run Code Online (Sandbox Code Playgroud)