Obtenga el uso de memoria total de Chrome

28

Dado que google chrome / chromium genera múltiples procesos, es más difícil ver cuánta memoria total usan estos procesos en total.

¿Hay una manera fácil de ver cuánta memoria total está usando una serie de procesos conectados?

Ryan1729
fuente
Si convierto los números que se imprimen de KiB a GiB, incluso para Res. Memoria Obtengo más que la cantidad de RAM de la máquina más intercambio. Entonces parece que algo se está contando en exceso.
Ryan1729

Respuestas:

30

Dado que google mató a chrome: // memory en marzo de 2016, ahora estoy usando 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 más preciso reemplazar chrompor ruta completa, por ejemplo, /opt/google/chromeo/usr/lib64/chromium-browser
  • Esto funciona igual para multiproceso firefox (e10s) con -P firefox
  • tenga cuidado, smem se informa en la salida, un ~ 10-20M adicional en mi sistema.
  • a diferencia de top, necesita acceso de root para monitorear con precisión los procesos de root: utilícelo sudo smempara eso.
  • vea esta respuesta SO para obtener más detalles sobre por qué smem es una buena herramienta y cómo leer la salida.
eddygeek
fuente
No estoy seguro de que esto funcione para mí. Cuando ejecuto el segundo comando, obtengo un valor devuelto de 338.0M. Esto es muy bajo. Cuando ejecuto System Monitor, puedo ver que hay 11 procesos de Chrome y cada uno toma entre 70 MB y 400 MB de RAM. No estoy seguro si System Monitor está informando incorrectamente o no.
sixtyfootersdude
El mismo problema para smem en una distribución Kali Linux 2017.1, la salida es 800Mo de ram utilizada por Chrome con 5 instancias y al menos 30 pestañas ... Y el monitor del sistema tampoco está de acuerdo con smem. ¿Alguien ha encontrado una solución a esto? (Gracias por la respuesta y las referencias)
matthieusb
1
Sus comentarios merecen una pregunta por separado (con salida completa de programas en conflicto). Simplemente publique el enlace en el comentario.
eddygeek
1
Lo usaría en chromelugar de solo chormporque si está ejecutando tanto cromo como cromo, estaría viendo el total para ambos.
RJ
1
Puede excluir smemde su propia salida usando algo como [c]hrome, por ejemplo smem -tkP '[c]hrome'. Esto funciona haciendo coincidir el cinterior de los corchetes y no los corchetes en sí.
wjandrea
3

Estoy seguro de que no es la mejor solución, aún así funciona para mí:

#!/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: cambie [/]opt/google/chrome/chromea algo apropiado para su sistema, por ejemplo, si está en Mac OS X (simplemente grep "chrome"funcionará).

Lev Bystritskiy
fuente
1
Esto "funciona" en que imprime un número. Sin embargo, este número no es tan útil ya que la memoria que se comparte entre varios procesos se cuenta varias veces.
Gilles 'SO- deja de ser malvado'
Me imagino que en realidad sigue siendo lo suficientemente bueno porque Chrome es, con mucho, el mayor consumidor de memoria en los escritorios típicos y cuando eliminas los procesos de Chrome, tu sistema se vuelve increíblemente rápido.
Sridhar Sarnobat
¿Por qué dos awkcomandos? Es decir, ¿por qué no solo ... | awk '{sum += $6} END {print sum}'?
wjandrea
2
Fwiw, he aquí una versión más corta más clara:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea
1
@Rushi No te molestes. Esta solución no da un número significativo. Usar smemsegún la respuesta superior. Aunque FWIW, lo implementaría como un script o función, ya que es demasiado complejo para un alias.
wjandrea
2

Ejecutando esto:

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

ocupa 1.8GB de RAM. Entonces esperarías ejecutar esto:

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

ocuparía 16 veces más. Pero no lo hace.

Esto se debe a la copia inteligente en escritura del kernel de Linux: dado que el contenido de '$ a' no cambia, entonces la memoria de '$ a' se puede compartir. Pero solo permanecerá compartido hasta que se cambie '$ a'. Cuando eso sucede, la sección modificada se copiará y comenzará a ocupar RAM.

No sé si puede medir la cantidad de memoria que se copia-en-escritura sobre-comprometida. Pero al menos esto explica su exceso de conteo.

Ole Tange
fuente
0

Simplemente calcule rápidamente la suma de los procesos.

En Mac :

  • vaya chrome://system/y seleccione todos los reportados en mem_usage
  • pegar en SublimeText
  • SelectAll (CMD + 'A') y SelectAllLines (CMD + SHIFT + 'L')
  • CMD + Derecha (ir a eol), Retroceso, Retroceso, Retroceso, ALT + Izquierda, CMD + Retroceso
  • Retroceso, escriba '+', CMD + 'A', CMD + 'C'
  • Abrir Terminal , ejecutar python, CMD + V, Entrar

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

PD: los ninjas de acceso directo y los jugadores de los juegos de lucha de los 80 y 90 no deberían tener problemas con esta solución

Kamafeather
fuente
0

Encontré una solución con vim y awk. Abra chrome: // system, expanda mem_usage, copie a vim y ejecute regexp:

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

Esto deja solo los números antes de MB. Guarda el archivo y ejecuta

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

No pude convertir el código vim regexp a sed.

Swedman
fuente
0

Hay USS que está disponible en plataformas cruzadas

El USS (Tamaño de conjunto único) es la memoria que es exclusiva de un proceso y que se liberaría si el proceso se terminara en este momento.

psutil> 4.0 La biblioteca de Python puede acceder a ella

Aquí lo usaría

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

donde pid = 292 es el PID del proceso más externo del Monitor de actividad

Gadelat
fuente
-1

Sabía que Chrome / Chrome tenía un administrador de tareas, pero no proporciona la memoria total utilizada. Resulta que el enlace "Estadísticas para nerds" en el administrador de tareas conduce a chrome: // memory-redirect / que enumera la memoria total utilizada. Sería bueno tener una validación externa de estos números, así como una forma de obtener la información en la línea de comando para poder hacer más, pero esta parece ser la mejor manera disponible.

Ryan1729
fuente
2
Esta respuesta ya no es válida. Ver bugs.chromium.org/p/chromium/issues/detail?id=588790
eddygeek