Obtenez l'utilisation totale de la mémoire de Chrome

28

Étant donné que Google Chrome / Chrome génère plusieurs processus, il est plus difficile de voir la quantité totale de mémoire que ces processus utilisent au total.

Existe-t-il un moyen simple de voir la quantité totale de mémoire utilisée par une série de processus connectés?

Ryan1729
la source
Si je convertis les nombres qui s'impriment de KiB en GiB, même pour Res. Mémoire J'obtiens plus que la quantité de RAM de la machine plus le swap. Il semble donc que quelque chose soit surévalué.
Ryan1729

Réponses:

30

Étant donné que Google a tué la mémoire chrome: // en mars 2016, j'utilise maintenant 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
  • pour être plus précis, remplacer chrompar un chemin complet, par exemple /opt/google/chromeou/usr/lib64/chromium-browser
  • cela fonctionne de la même façon pour le firefox multiprocessus (e10s) avec -P firefox
  • attention, smem se signale en sortie, ~ 10-20M supplémentaires sur mon système.
  • contrairement à top, il a besoin d'un accès root pour surveiller avec précision les processus root - utilisez-le sudo smempour cela.
  • voir cette réponse SO pour plus de détails sur pourquoi smem est un bon outil et comment lire la sortie.
eddygeek
la source
Je ne suis pas sûr que cela fonctionne pour moi. Lorsque j'exécute la deuxième commande, j'obtiens une valeur renvoyée de 338.0M. C'est trop bas. Lorsque j'exécute System Monitor, je peux voir qu'il y a 11 processus Chrome et que chacun prend entre 70 Mo et 400 Mo de RAM. Je ne sais pas si le Moniteur système génère des rapports incorrects ou non.
sixtyfootersdude
Même problème pour smem sur une distribution Kali Linux 2017.1, la sortie est de 800 Mo de ram utilisé par chrome avec 5 instances et au moins 30 onglets ... Et le moniteur système n'est pas d'accord non plus avec smem. Quelqu'un a-t-il trouvé une solution à cela? (Merci pour la réponse et les références)
matthieusb
1
Vos commentaires méritent une question distincte (avec la sortie complète des programmes en conflit). Postez simplement le lien dans le commentaire.
eddygeek
1
J'utiliserais chromeau lieu de simplement chormparce que si vous utilisez à la fois le chrome et le chrome, vous verriez le total pour les deux.
RJ
1
Vous pouvez exclure smemde sa propre sortie en utilisant quelque chose comme [c]hrome, par exemple smem -tkP '[c]hrome'. Cela fonctionne en faisant correspondre l' cintérieur des crochets et non les crochets eux-mêmes.
wjandrea
3

Je suis sûr que ce n'est pas la meilleure solution, cela fonctionne toujours pour moi:

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

Remarque: remplacez le [/]opt/google/chrome/chromepar quelque chose de approprié pour votre système, par exemple si vous êtes sur Mac OS X ( grep "chrome"cela fonctionnera simplement ).

Lev Bystritskiy
la source
1
Cela «fonctionne» en ce sens qu'il imprime un nombre. Cependant, ce nombre n'est pas très utile car la mémoire partagée entre plusieurs processus est comptée plusieurs fois.
Gilles 'SO- arrête d'être méchant'
J'imagine qu'en réalité, il est toujours assez bon parce que Chrome est de loin le plus gros porc de mémoire sur les ordinateurs de bureau typiques et lorsque vous tuez les processus Chrome, votre système devient extrêmement rapide.
Sridhar Sarnobat
Pourquoi deux awkcommandes? Autrement dit, pourquoi pas juste ... | awk '{sum += $6} END {print sum}'?
wjandrea
2
FWIW, voici une version plus courte et plus claire:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea
1
@Rushi Ne vous embêtez pas. Cette solution ne donne pas un nombre significatif. Utilisez smemselon la première réponse. Bien que FWIW, je l'implémente en tant que script ou fonction, car il est trop complexe pour un alias.
wjandrea
2

Exécuter ceci:

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

prend 1,8 Go de RAM. Vous vous attendez donc à exécuter ceci:

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

prendrait 16 fois plus. Mais ce n'est pas le cas.

Cela est dû à la copie-écriture intelligente du noyau Linux: étant donné que le contenu de '$ a' ne change pas, la mémoire de '$ a' peut être partagée. Mais il ne restera partagé que jusqu'à ce que «$ a» soit modifié. Lorsque cela se produit, la section modifiée sera copiée et commencera à utiliser la RAM.

Je ne sais pas si vous pouvez mesurer la quantité de mémoire surchargée de copie sur écriture. Mais au moins cela explique votre sur-comptage.

Ole Tange
la source
0

Calculez rapidement la somme des processus.

Sur Mac :

  • accédez à chrome://system/et sélectionnez tous les éléments signalés dans mem_usage
  • coller dans SublimeText
  • SelectAll (CMD + 'A') et SelectAllLines (CMD + SHIFT + 'L')
  • CMD + Droite (aller à eol), Retour arrière, Retour arrière, Retour arrière, ALT + Gauche, CMD + Retour arrière
  • Retour arrière, tapez '+', CMD + 'A', CMD + 'C'
  • ouvrir le terminal , exécuter python, CMD + V, entrer

Et voilà! "Facile" ... 🤓😅

PS - Les raccourcis ninjas et les joueurs des jeux de combat des années 80 et 90 ne devraient avoir aucun problème avec cette solution 🤖🕹💾

Kamafeather
la source
0

J'ai trouvé une solution avec vim et awk. Ouvrez chrome: // system, développez mem_usage, copiez dans vim et exécutez l'expression rationnelle:

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

Cela ne laisse que les chiffres avant MB. Enregistrez le fichier et exécutez

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

Je n'ai pas pu convertir le code regexp de vim en sed.

swedman
la source
0

Il y a USS qui est disponible sur plusieurs plateformes

L'USS (Unique Set Size) est la mémoire qui est unique à un processus et qui serait libérée si le processus se terminait maintenant.

psutil> 4.0 La bibliothèque Python peut y accéder

Voici je l'utiliserais

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

où pid = 292 est le PID de la plupart des processus externes du moniteur d'activité

gadelat
la source
-1

Je savais que chrome / chrome avait un gestionnaire de tâches, mais il ne donne pas la mémoire totale utilisée. Il s'avère que le lien "Statistiques pour les nerds" dans le gestionnaire de tâches mène à chrome: // memory-redirect / qui répertorie la mémoire totale utilisée. Ce serait bien d'avoir une validation externe de ces numéros, ainsi qu'un moyen d'obtenir les informations sur la ligne de commande afin que l'on puisse en faire plus, mais cela semble être le meilleur moyen disponible.

Ryan1729
la source
2
Cette réponse n'est plus valable. Voir bugs.chromium.org/p/chromium/issues/detail?id=588790
eddygeek