如何查看命令组(而不是进程)的内存使用情况

如何查看命令组(而不是进程)的内存使用情况

使用 top/htop 等工具时,有没有办法对类似的进程进行分组?有时我只是想知道是什么在消耗我的内存,而某些程序(主要是浏览器)正在使用多个进程,这使得很难读取它们实际使用了多少 RAM。

到目前为止我只想到了类似的东西:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc

答案1

您可以用来ps -C仅显示特定命令名称的进程信息。

例如

ps -C opera

然后,您可以使用其他ps选项来提取您要查找的数据。特别是,h或者--no-headers抑制列标题,并-o pmem显示进程使用的内存百分比。

ps -C opera --no-headers -o pmem

这将为您提供一堆内存使用百分比,每行一个。

像这样求和数据的方法有很多种,我经常使用的方法之一是将其通过管道传输到 xargs 中,将其转换为一行,其中元素由空格分隔,然后传输到 sed 中,将空格转换为+符号,然后再传输到bcsed 中以执行计算。您的管道传输方法paste -sd+同样有效,甚至可以说比| xargs | sed.

将所有这些放在一起,您将得到:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

或者

ps -C opera --no-headers -o pmem | paste -sd+ | bc

换句话说,ps -C如果您只需要有关一个特定正在运行的程序的数据,则可以使用多个 grep 来代替。

注意:-C如果您一次需要有关多个程序的信息,则可以在同一命令行上使用多个选项。例如

ps -C iceweasel -C chromium -C opera

答案2

从内部顶部您可以使用以下内容:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

您也可以尝试:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

此命令将按内存使用情况给出前 5 个进程。

我希望您发现此信息有帮助!

答案3

你可以制作一个shell脚本

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

这将提供内存使用率最高的应用程序。

答案4

这可以简化为术语SQL

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

请注意,目前还没有上传到皮伊,并且也只能在系统范围内安装(setup.py有点损坏),例如sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

termsql在 PyPI 上可用,并且可以通过例如 来安装pipx install termsql

相关内容