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?
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?
Respostas:
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
chrom
por caminho completo, por exemplo, /opt/google/chrome
ou/usr/lib64/chromium-browser
-P firefox
sudo smem
para isso.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.
chrome
vez de apenas chorm
porque se você estiver executando o chrome e o crómio, estará vendo o total para ambos.
smem
de sua própria saída usando algo como [c]hrome
, por exemplo smem -tkP '[c]hrome'
. Isso funciona combinando o c
interior dos colchetes e não os colchetes em si.
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/chrome
para algo apropriado para o seu sistema, por exemplo, se você estiver no Mac OS X (simplesmente grep "chrome"
funcionará).
awk
comandos? Ou seja, por que não apenas ... | awk '{sum += $6} END {print sum}'
?
ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
smem
pela resposta principal. Embora o FWIW, eu o implementaria como um script ou função, já que é muito complexo para um alias.
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.
Apenas calcule rapidamente a soma dos processos.
No Mac :
chrome://system/
e selecione todos os relatados em mem_usagepython
, CMD + V, EnterEt 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 🤖🕹💾
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.
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
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.