Ermitteln Sie die Gesamtspeicherauslastung von Chrome

28

Da Google Chrome / Chrom mehrere Prozesse erzeugt, ist es schwieriger festzustellen, wie viel Gesamtspeicher diese Prozesse insgesamt belegen.

Gibt es eine einfache Möglichkeit, um festzustellen, wie viel Gesamtspeicher eine Reihe verbundener Prozesse belegt?

Ryan1729
quelle
Wenn ich die von KiB zu GiB ausgedruckten Zahlen konvertiere, dann auch für Res. Arbeitsspeicher Ich bekomme mehr als die Größe des Arbeitsspeichers plus Swap. Es scheint also, dass etwas überzählt wird.
Ryan1729

Antworten:

30

Angesichts der Tatsache, dass Google Chrome: // Speicher im März 2016 getötet hat, verwende ich jetzt 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
  • um genauer zu sein, chromdurch vollständigen Pfad ersetzen zB /opt/google/chromeoder/usr/lib64/chromium-browser
  • das funktioniert genauso für multiprocess firefox (e10s) mit -P firefox
  • seien sie vorsichtig, smem meldet sich in der ausgabe zusätzliche ~ 10-20M auf meinem system.
  • im gegensatz zu top benötigt es root-zugriff, um root-prozesse genau zu überwachen - verwenden sie sudo smemdafür.
  • In dieser SO-Antwort erfahren Sie, warum smem ein gutes Werkzeug ist und wie Sie die Ausgabe lesen.
eddygeek
quelle
Ich bin mir nicht sicher, ob das bei mir funktioniert. Wenn ich den zweiten Befehl ausführe, erhalte ich den Rückgabewert von 338.0M. Das ist zu niedrig. Wenn ich den Systemmonitor ausführe, sehe ich, dass es 11 Chromprozesse gibt und jeder zwischen 70 MB und 400 MB RAM beansprucht. Nicht sicher, ob der Systemmonitor falsch meldet oder nicht.
Sixtyfootersdude
Das gleiche Problem für smem auf einer Kali Linux 2017.1-Distribution: Die Ausgabe beträgt 800 MB RAM, der von Chrome mit 5 Instanzen und mindestens 30 Registerkarten verwendet wird. Auch der Systemmonitor stimmt nicht mit smem überein. Hat jemand eine Lösung dafür gefunden? (Danke für die Antwort und die Hinweise)
matthieusb
1
Ihre Kommentare verdienen eine separate Frage (bei vollständiger Ausgabe widersprüchlicher Programme). Poste einfach den Link im Kommentar.
Eddygeek
1
Ich würde chromeanstelle von nur verwenden, chormweil, wenn Sie sowohl Chrom als auch Chrom ausführen, Sie für beide total sehen würden.
RJ
1
Sie können smemvon der eigenen Ausgabe ausschließen, indem Sie etwas wie [c]hromez smem -tkP '[c]hrome'. Dies funktioniert, indem die cinneren eckigen Klammern und nicht die Klammern selbst angepasst werden.
wjandrea
3

Ich bin mir sicher, dass es nicht die beste Lösung ist, aber es funktioniert für mich:

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

Hinweis: Ändern Sie den [/]opt/google/chrome/chromeWert in einen für Ihr System geeigneten Wert, z. B. wenn Sie unter Mac OS X arbeiten ( grep "chrome"funktioniert einfach ).

Lev Bystritskiy
quelle
1
Dies funktioniert, indem eine Zahl gedruckt wird. Diese Zahl ist jedoch nicht allzu nützlich, da Speicher, der von mehreren Prozessen gemeinsam genutzt wird, mehrfach gezählt wird.
Gilles 'SO- hör auf böse zu sein'
Ich stelle mir in der Realität immer noch gut genug vor, da Chrome der mit Abstand größte Speicherfresser auf typischen Desktops ist und wenn Sie Chrome-Prozesse beenden, wird Ihr System blitzschnell.
Sridhar Sarnobat
Warum zwei awkBefehle? Das heißt, warum nicht einfach ... | awk '{sum += $6} END {print sum}'?
wjandrea
2
FWIW, hier ist eine kürzere, klarere Version:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea
1
@ Sushi Mach dir keine Sorgen. Diese Lösung gibt keine aussagekräftige Zahl an. Verwenden Sie smemnach der oberen Antwort. Obwohl FWIW, würde ich es als Skript oder Funktion implementieren, da es für einen Alias ​​zu komplex ist.
Wjandrea
2

Laufen diese:

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

beansprucht 1,8 GB RAM. Sie würden also folgendes erwarten:

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

würde 16 mal so viel aufnehmen. Aber das tut es nicht.

Dies liegt am intelligenten Copy-on-Write des Linux-Kernels: Da sich der Inhalt von '$ a' nicht ändert, kann der Speicher von '$ a' gemeinsam genutzt werden. Es bleibt jedoch nur solange freigegeben, bis '$ a' geändert wird. In diesem Fall wird der geänderte Abschnitt kopiert und der Arbeitsspeicher belegt.

Ob Sie messen können, wie viel Speicher beim Kopieren überschrieben wird, weiß ich nicht. Aber zumindest erklärt dies Ihr Überzählen.

Ole Tange
quelle
0

Berechnen Sie einfach schnell die Summe der Prozesse.

Auf dem Mac :

  • gehe zu chrome://system/und wähle alle in mem_usage gemeldeten aus
  • Einfügen in SublimeText
  • SelectAll (CMD + 'A') und SelectAllLines (CMD + SHIFT + 'L')
  • CMD + Rechts (gehe zu eol), Backspace, Backspace, Backspace, ALT + Links, CMD + Backspace
  • Rücktaste, tippe '+', CMD + 'A', CMD + 'C'
  • Terminal öffnen , ausführen python, CMD + V, Enter

Et voila! "Einfach" ... 🤓😅

PS - Shortcut Ninjas & 80er / 90er Fighting-Game-Spieler sollten mit dieser Lösung kein Problem haben 🤖🕹💾

Kamafeder
quelle
0

Ich habe mit vim und awk eine Lösung gefunden. Öffne chrome: // system, erweitere mem_usage, kopiere nach vim und führe den regulären Ausdruck aus:

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

Dies lässt nur die Zahlen vor MB. Speichern Sie die Datei und führen Sie aus

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

Ich konnte den vim-Regexp-Code nicht in sed konvertieren.

Schwede
quelle
0

Es gibt USS, die plattformübergreifend verfügbar ist

Die USS (Unique Set Size) ist der Speicher, der für einen Prozess eindeutig ist und der freigegeben würde, wenn der Prozess gerade beendet würde.

psutil> 4.0 Python-Bibliothek kann darauf zugreifen

Hier würde ich es benutzen

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

Dabei ist pid = 292 die PID des äußersten Prozesses von Activity Monitor

gadelat
quelle
-1

Ich wusste, dass Chrom / Chrom einen Task-Manager hat, aber er gibt nicht den gesamten verwendeten Speicher an. Es stellt sich heraus, dass der Link "Stats for Nerds" im Task-Manager zu chrome: // memory-redirect / führt, das den gesamten verwendeten Speicher auflistet. Es wäre schön, eine externe Validierung dieser Nummern sowie eine Möglichkeit zu haben, die Informationen in der Befehlszeile abzurufen, damit mehr damit getan werden kann, aber dies scheint der beste verfügbare Weg zu sein.

Ryan1729
quelle
2
Diese Antwort ist nicht mehr gültig. Siehe bugs.chromium.org/p/chromium/issues/detail?id=588790
eddygeek