获取chrome的总内存使用量


28

由于Google铬/铬产生了多个进程,因此很难看到这些进程总共使用了多少内存。

有没有一种简单的方法来查看一系列连接的进程正在使用多少内存?


如果我将打印出来的数字从KiB转换为GiB,那么即使对于Res也是如此。我获得的内存超过了机器的RAM加交换空间。因此,似乎有些东西被高估了。
Ryan1729

Answers:


30

鉴于Google在2016年3月杀死了chrome:// memory,我现在正在使用smem

# detailed output, in kB apparently
smem -t -P chrom
# just the total PSS, with automatic unit:
smem -t -k -c pss -P chrom | tail -n 1
  • 更准确地替换chrom为完整路径,例如/opt/google/chrome/usr/lib64/chromium-browser
  • 这对于多进程Firefox(e10s)具有相同的功能 -P firefox
  • 请注意,smem会在输出中报告自身,在我的系统上会额外报告10-20M。
  • 与top不同,它需要root访问权限才能准确地监视root进程- sudo smem为此使用。
  • 有关为何smem是一个很好的工具以及如何读取输出的更多详细信息,请参见此SO答案

我不确定这是否对我有用。当我运行第二个命令时,我得到的返回值为338.0M。这太低了。运行系统监视器时,我看到有11个chrome进程,每个进程占用70MB到400MB的RAM。不确定系统监视器是否报告不正确。
sixtyfootersdude

在Kali Linux 2017.1发行版上,smem存在相同的问题,输出是chrome使用5个实例和至少30个制表符的chrome使用的800Mo ram ...并且系统监视器也与smem不一致。有没有人找到解决方案?(感谢您的回答和参考)
matthieusb

1
您的评论值得一个单独的问题(完整输出有冲突的程序)。只需在评论中发布链接即可。
eddygeek

1
我将使用它,chrome而不是仅仅chorm因为如果您同时运行铬和铬,您将看到两者的总数。
RJ

1
您可以排除smem使用类似从它自己的输出[c]hrome,例如smem -tkP '[c]hrome'。通过匹配c方括号内的内容而不是括号本身来进行工作。
wjandrea

3

我确信这不是最好的解决方案,但仍然对我有用:

#!/bin/sh
ps aux | grep "[/]opt/google/chrome/chrome" | awk '{print $5}' | awk '{sum += $1 } END { print sum }' 
ps aux | grep "[/]opt/google/chrome/chrome" | awk '{print $6}' | awk '{sum += $1 } END { print sum }' 

注意:将更[/]opt/google/chrome/chrome改为适合您的系统的名称,例如,如果您使用的是Mac OS X(仅grep "chrome"可以使用)。


1
这是“有效的”,因为它可以打印数字。但是,此数字并不是很有用,因为在多个进程之间共享的内存会被多次计数。
吉尔(Gilles)“所以,别再邪恶了”

我想实际上它仍然足够好,因为Chrome是迄今为止在典型台式机上最大的内存消耗,并且当您终止chrome进程时,系统变得非常快。
Sridhar Sarnobat '16

为什么要两个awk命令?也就是说,为什么不只是... | awk '{sum += $6} END {print sum}'
wjandrea

2
FWIW,这是一个更短,更清晰的版本:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea

1
@Rushi不要打扰。该解决方案没有给出有意义的数字。使用smem每个最高答案。尽管是FWIW,但我将其实现为脚本或函数,因为它对于别名来说太复杂了。
wjandrea

2

运行此:

perl -e '$a="x"x1000000000;sleep(10);print"done\n"'

占用1.8GB RAM。因此,您可以运行以下命令:

perl -e '$a="x"x1000000000;fork;fork;fork;fork;sleep(10);print"done\n"'

将占用16倍。但事实并非如此。

这是由于Linux内核的智能写时复制功能:由于'$ a'的内容不变,因此可以共享'$ a'的内存。但是它只会保持共享,直到'$ a'被更改。发生这种情况时,更改后的部分将被复制并开始占用RAM。

我不知道是否可以测量多少内存是写时复制过量使用的。但这至少可以解释您的超支。


0

只需快速计算出这些过程的总和即可。

Mac上

  • 转到chrome://system/并选择所有在mem_usage中报告的
  • 粘贴在SublimeText中
  • SelectAll(CMD +'A')和SelectAllLines(CMD + SHIFT +'L')
  • CMD + Right(转到eol),Backspace,Backspace,Backspace,ALT + Left,CMD + Backspace
  • 退格键,输入'+',CMD +'A',CMD +'C'
  • 打开终端,运行python,CMD + V,输入

瞧!“容易” ...🤓😅

PS-忍者和80年代/ 90年代的捷径格斗游戏玩家对此解决方案应该没有问题🤖🕹💾


0

我找到了vim和awk的解决方案。打开chrome:// system,展开mem_usage,复制到vim并执行regexp:

:%s/\D*\(\d*\).MB.*/\1

这样仅保留MB之前的数字。保存文件并执行

cat file | awk '{sum += $1} END {print sum}'

我无法将vim regexp代码转换为sed。


0

USS可用于跨平台

USS(唯一集大小)是进程唯一的内存,如果当前终止该进程,则将释放该内存。

psutil> 4.0 Python库可以访问它

这是我会用它

sudo python3 -c "import psutil;print(sum(p.memory_full_info().uss for p in psutil.Process(pid=292).children())/1024/1024);"

其中pid = 292是活动监视器中最外部进程的PID


-1

我知道chrome / chromium有一个任务管理器,但是它没有给出所使用的总内存。事实证明,任务管理器中的“书呆子状态”链接指向chrome:// memory-redirect /,它确实列出了所使用的总内存。最好是对这些数字进行外部验证,以及在命令行上获取信息的方法,以便可以做更多的事情,但这似乎是最好的方法。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.