检查 Linux 上程序的物理内存和 CPU 的总使用情况

检查 Linux 上程序的物理内存和 CPU 的总使用情况

我想比较 google chrome 和 firefox 使用的物理内存和 CPU 功率。因此,我尝试使用 htop 来执行此操作,我通常使用它来跟踪我的系统资源,但发现我无法得出结论。我已阅读了几个帖子,但我仍然感到困惑,原因如下:当我使用 F4 过滤例如 chrome 时,htop 会向我显示数十个我不知道是线程还是进程的任务。据我所知,线程共享相同的地址空间,但进程则不然。我可以按 F5 来查看树状视图,并且所有任务都有一个父任务。无论该程序使用多个进程还是线程,RES 列中父任务的值都表示总内存,CPU% 列中的值表示该程序的总 CPU 使用率,这显然是错误的。我通过做这个小实验发现了这一点:我运行了一个我找到的 python 程序,它使用多处理进行一些计算。这是我在 htop 中看到的:CPU% 列中的父值始终显示 0,但有 7 个任务上升到 100%(我的系统有 4 个物理核心,每个核心有 2 个线程)。

那么有人可以解释一下发生了什么吗?我如何检查程序的物理内存和 CPU 的总使用情况?

据我所知,确定确切的内存使用情况并不简单,但对我来说绝对值并不重要,我只需要可以用来比较的值。

答案1

你可以使用这个命令:

pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'

或者这个(更改 $9 来选择你的列):

top -b -n1 | grep chrome | awk '{ SUM += $9} END { print SUM }'

更多命令和建议可以在以下位置找到:

答案2

psgrep 给出错误:

$ pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
pgrep: only one pattern can be provided
Try `pgrep --help' for more information.
error: list of process IDs must follow -p

Usage:
ps [options]

Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.

For more details see ps(1).

我可以使用 htop PID 查看父任务并执行以下操作:

$ pgrep -P 1721 | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
1.2 2.6

但 1.2% 的内存似乎太低了。

top 不会计算所有内容。例如:$ top -b -n1 | grep freeplane | awk '{ SUM += $9} END { print SUM }' 我得到 0,因为它只获取此命令:/usr/share/freeplane/freeplane.sh,但没有获取此命令:/usr/sbin/java -Xmx512m -Dorg.freeplane

ps auxf 似乎计算了所有内容,对于 chrome,我得到了这个:

$ ps auxf | grep chrome | awk '{ SUM += $4} END { print SUM }'
5.024G

这似乎更现实。但如果我用以下方法测量已用内存:

$ free -h

在关闭 Chrome 之前和之后,我看到了 2.4Gi 的差异。

编辑:我发现 ps_mem 可以很容易地检查和比较每个应用程序的内存使用情况。

相关内容