我们怎样才能统计一个程序所有进程的内存使用情况呢?
例如,我打开了许多网页的 Chrome 选项卡,每个选项卡运行不同的进程。如何获取所有 Chrome 标签页的内存使用总和?请注意,Chrome 的可执行文件位于/opt/google/chrome/chrome
我的 Ubuntu 上。
答案1
一种方便的方法是使用在顶上。在顶部,您可以键入P查看每个程序像这样的统计数据:
PAUSED
NPROCS SYSCPU USRCPU VSIZE RSIZE RDDSK WRDSK SNET MEM CMD 1/4
17 1.14s 8.06s 14.3G 2.7G ? ? ? 35% chrome
1 0.30s 0.30s 2.6G 1.9G ? ? ? 25% Xorg
1 0.09s 1.15s 1.8G 329.7M ? ? ? 4% gnome-shell
1 0.00s 0.07s 994.8M 257.2M ? ? ? 3% thunderbird
1 0.00s 0.00s 1.3G 162.4M ? ? ? 2% soffice.bin
2 0.00s 0.00s 1.2G 86736K ? ? ? 1% gvim
1 0.00s 0.01s 1.0G 64724K ? ? ? 1% owncloud
1 0.00s 0.00s 970.3M 59908K ? ? ? 1% evolution-cale
1 0.00s 0.00s 675.7M 48404K ? ? ? 1% tracker-extrac
1 0.03s 0.03s 581.0M 47080K ? ? ? 1% xchat
2 0.00s 0.00s 84.2G 45292K ? ? ? 1% nacl_helper
输入M每个进程的内存统计信息。
PAUSED
PID MINFLT MAJFLT VSTEXT VSIZE RSIZE VGROW RGROW MEM CMD 1/5
1069 38118 0 0K 2.6G 1.9G 0K 40K 25% Xorg
14702 20 0 91595K 939.1M 427.0M 0K 0K 5% chrome
3755 39 0 11K 1.8G 329.7M 0K 0K 4% gnome-shell
14669 7804 0 91595K 1.8G 293.1M 0K -136K 4% chrome
15530 477 0 91595K 1.1G 292.6M -8196K -156K 4% chrome
3932 6 0 96K 994.8M 257.2M 0K 0K 3% thunderbird
15436 7434 0 91595K 978.4M 228.5M -1024K -212K 3% chrome
14821 2129 0 91595K 1.0G 220.2M 1024K 1936K 3% chrome
15084 213 0 91595K 890.7M 211.9M 0K 0K 3% chrome
15129 58 0 91595K 915.4M 208.1M 0K 0K 3% chrome
14729 13 0 91595K 1.1G 188.0M 0K 0K 2% chrome
15474 2080 0 91595K 858.5M 166.0M 0K -800K 2% chrome
11220 0 0 2K 1.3G 162.4M 0K 0K 2% soffice.bin
键入H以获得可用命令的简要帮助。键入A以切换仅活动/所有进程的统计信息收集,Z以在调查之前暂停自动更新(PAUSED
启用后可在右上角看到)。
答案2
您可以将 ps 命令与其他命令一起使用,如下所示:
ps -eo size,command --sort -size | grep chromium | awk '{ hr=$1/1024 ; sum +=hr} END {print sum}'
对于日常用例,创建一个文件(我在这里将其命名为 memsum!)并将其放入:
ps -eo size,command --sort -size | grep $1 | awk '{ hr=$1/1024 ; sum +=hr; echo $1} END {print sum}'
# ^this $1 will come from runtime argument
然后在其上设置x
标志(使其可执行):
chmod +x memsum
并使用它:
./memsum chromium
./memsum httpd
答案3
以下命令 grep ps 的输出,打印该输出,并使用 awk 对列中的值求和。查看 ps 的输出以及总和非常有用,可以验证正在对正确的进程集进行求和。
ps xuaw --cols=80|grep -e chrome -e COMMAND|grep -v grep |awk '{m=$5;sum += m;print} END {print "Total VSZ: " sum}'
这是示例输出:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
2006 29273 0.0 0.3 701716 82948 ? Sl Oct30 1:44 /opt/google/chrome/chrome
2006 29288 0.0 0.0 351768 6892 ? S Oct30 0:00 /opt/google/chrome/chrome
2006 29289 0.0 0.0 6284 332 ? S Oct30 0:00 /opt/google/chrome/chrome-sandbox /opt/google/chrome/chrome --type=
2006 29290 0.0 0.0 398284 20104 ? S Oct30 0:00 /opt/google/chrome/chrome --type=zygote
2006 29294 0.0 0.0 125500 4684 ? S Oct30 0:00 /opt/google/chrome/nacl_helper_bootstrap /opt/google/chrome/nacl_he
2006 29295 0.0 0.0 406480 7300 ? S Oct30 0:00 /opt/google/chrome/chrome --type=zygote
2006 29432 0.0 0.0 989216 19464 ? Sl Oct30 0:01 /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fiel
2006 29772 0.0 0.1 1004072 32408 ? Sl Oct30 0:09 /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fiel
2006 29780 0.0 0.0 389592 19404 ? Sl Oct30 0:00 /opt/google/chrome/chrome --type=service
2006 29788 0.0 0.0 938204 21080 ? Sl Oct30 0:00 /opt/google/chrome/chrome --type=ppapi-broker --channel=29273.5.113
Total VSZ: 5311116