使用 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 中,将空格转换为+
符号,然后再传输到bc
sed 中以执行计算。您的管道传输方法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
。