Obtenha o uso total de memória do chrome

28

Como o google chrome / chromium gera vários processos, é mais difícil ver quanta memória total esses processos usam no total.

Existe uma maneira fácil de ver quanta memória total uma série de processos conectados está usando?

Ryan1729
fonte
Se eu converter os números impressos de KiB para GiB, mesmo para Res. Memória Recebo mais do que a quantidade de RAM da máquina mais a troca. Então parece que algo está sendo superestimado.
precisa saber é o seguinte

Respostas:

30

Dado que o google matou a memória chrome: // em março de 2016, agora estou usando o 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
  • para ser mais preciso, substitua chrompor caminho completo, por exemplo, /opt/google/chromeou/usr/lib64/chromium-browser
  • isso funciona da mesma maneira para o multiprocess firefox (e10s) com -P firefox
  • tenha cuidado, o smem se reporta na saída, um ~ 10-20M adicional no meu sistema.
  • ao contrário do topo, ele precisa de acesso root para monitorar com precisão os processos raiz - use sudo smem para isso.
  • veja esta resposta SO para obter mais detalhes sobre por que o smem é uma boa ferramenta e como ler a saída.
eddygeek
fonte
Não tenho certeza de que isso esteja funcionando para mim. Quando executo o segundo comando, recebo um valor retornado de 338.0M. Isso é muito baixo. Quando executo o System Monitor, vejo que existem 11 processos chrome e cada um ocupa entre 70 MB e 400 MB de RAM. Não tenho certeza se o Monitor do sistema está relatando incorretamente ou não.
sixtyfootersdude
Mesmo problema para o smem em uma distribuição do Kali Linux 2017.1, a saída é de 800Mo de ram usada pelo chrome com 5 instâncias e pelo menos 30 guias ... E o monitor do sistema também não concorda com o smem. Alguém encontrou uma solução para isso? (Obrigado pela resposta e as referências)
matthieusb
1
Seus comentários merecem uma pergunta separada (com saída completa de programas conflitantes). Basta postar o link no comentário.
eddygeek
1
Eu usaria em chromevez de apenas chormporque se você estiver executando o chrome e o crómio, estará vendo o total para ambos.
RJ
1
Você pode excluir smemde sua própria saída usando algo como [c]hrome, por exemplo smem -tkP '[c]hrome'. Isso funciona combinando o cinterior dos colchetes e não os colchetes em si.
Wjandrea
3

Tenho certeza de que não é a melhor solução, ainda assim funciona para mim:

#!/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 }' 

Nota: altere [/]opt/google/chrome/chromepara algo apropriado para o seu sistema, por exemplo, se você estiver no Mac OS X (simplesmente grep "chrome"funcionará).

Lev Bystritskiy
fonte
1
Isso "funciona" na medida em que imprime um número. No entanto, esse número não é tão útil, pois a memória compartilhada entre vários processos é contada várias vezes.
Gilles 'SO- stop be evil'
Eu imagino que, na realidade, ainda seja bom o suficiente, porque o Chrome é de longe o maior porco da memória em desktops típicos e, quando você mata os processos do Chrome, seu sistema se torna rapidamente.
Sridhar Sarnobat 3/16/16
Por que dois awkcomandos? Ou seja, por que não apenas ... | awk '{sum += $6} END {print sum}'?
Wjandrea
2
FWIW, aqui está uma versão mais curta, mais claro:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea
1
@Rushi Não se preocupe. Esta solução não fornece um número significativo. Use smempela resposta principal. Embora o FWIW, eu o implementaria como um script ou função, já que é muito complexo para um alias.
wjandrea
2

Executando isso:

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

ocupa 1,8 GB de RAM. Então, você esperaria executar isso:

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

ocuparia 16 vezes mais. Mas isso não acontece.

Isso ocorre devido à cópia inteligente durante a gravação do kernel do Linux: como o conteúdo de '$ a' não muda, a memória de '$ a' pode ser compartilhada. Mas ele só será compartilhado até que '$ a' seja alterado. Quando isso acontece, a seção alterada será copiada e começará a ocupar RAM.

Se você pode medir quanta memória está sobregravada na cópia na gravação, eu não sei. Mas pelo menos isso explica sua contagem excessiva.

Ole Tange
fonte
0

Apenas calcule rapidamente a soma dos processos.

No Mac :

  • vá para chrome://system/e selecione todos os relatados em mem_usage
  • colar em SublimeText
  • SelectAll (CMD + 'A') e SelectAllLines (CMD + SHIFT + 'L')
  • CMD + Direita (vá para eol), Backspace, Backspace, Backspace, ALT + Esquerda, CMD + Backspace
  • Backspace, digite '+', CMD + 'A', CMD + 'C'
  • abra Terminal , execute python, CMD + V, Enter

Et voila! "Fácil" ... 🤓😅

PS - Ninjas de atalho e jogadores dos jogos de luta dos anos 80/90 não devem ter problemas com esta solução 🤖🕹💾

Kamafeather
fonte
0

Encontrei uma solução com vim e awk. Abra o chrome: // system, expanda mem_usage, copie para o vim e execute o regexp:

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

Isso deixa apenas os números antes de MB. Salve o arquivo e execute

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

Não consegui converter o código vim regexp para sed.

sueco
fonte
0

Existe USS disponível em várias plataformas

O USS (tamanho único do conjunto) é a memória exclusiva de um processo e que seria liberada se o processo fosse encerrado no momento.

psutil> biblioteca Python 4.0 pode acessá-lo

Aqui está eu usaria

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

em que pid = 292 é o PID da maioria dos processos externos do Activity Monitor

gadelat
fonte
-1

Eu sabia que o chrome / chromium tinha um gerenciador de tarefas, mas não fornece a memória total usada. Acontece que o link "Stats for nerds" no gerenciador de tarefas leva ao chrome: // memory-redirect / que lista a memória total usada. Seria bom ter uma validação externa desses números, bem como uma maneira de obter as informações na linha de comando para que mais pudesse ser feito com ela, mas essa parece ser a melhor maneira disponível.

Ryan1729
fonte
2
Esta resposta não é mais válida. Veja bugs.chromium.org/p/chromium/issues/detail?id=588790
eddygeek