Ottieni l'utilizzo totale della memoria di Chrome


28

Poiché google chrome / chromium genera più processi, è più difficile vedere quanta memoria totale questi processi utilizzano in totale.

C'è un modo semplice per vedere quanta memoria totale utilizza una serie di processi connessi?


Se converto i numeri che vengono stampati da KiB a GiB, allora anche per Res. Memoria Ricevo più della quantità di RAM della macchina più lo scambio. Quindi sembra che qualcosa venga sovrastimato.
Ryan1729,

Risposte:


30

Dato che google ha ucciso chrome: // memory a marzo 2016, sto 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
  • per essere più precisi, sostituire chromcon il percorso completo, ad es. /opt/google/chromeo/usr/lib64/chromium-browser
  • funziona allo stesso modo con Firefox multiprocesso (e10s) con -P firefox
  • fai attenzione, smem riporta se stesso nell'output, un ulteriore ~ ​​10-20M sul mio sistema.
  • a differenza di top, ha bisogno dell'accesso root per monitorare accuratamente i processi root - usalo sudo smemper quello.
  • vedere questa risposta SO per maggiori dettagli sul perché smem è un buon strumento e su come leggere l'output.

Non sono sicuro che questo funzioni per me. Quando eseguo il secondo comando, ottengo un valore restituito di 338.0M. Questo è troppo basso. Quando eseguo System Monitor, vedo che ci sono 11 processi Chrome e ognuno richiede tra 70 MB e 400 MB di RAM. Non sono sicuro che System Monitor stia segnalando in modo errato o meno.
sixtyfootersdude,

Stesso problema per smem su una distribuzione di Kali Linux 2017.1, l'output è 800Mo di ram utilizzato da Chrome con 5 istanze e almeno 30 schede ... E neanche il monitor di sistema è d'accordo con smem. Qualcuno ha trovato una soluzione a questo? (Grazie per la risposta e i riferimenti)
matthieusb

1
I tuoi commenti meritano una domanda separata (con l'output completo di programmi in conflitto). Pubblica il link nel commento.
eddygeek,

1
Vorrei usare chromeinvece che solo chormperché se esegui sia il cromo che il cromo, vedresti il ​​totale per entrambi.
RJ

1
È possibile escludere smemdal proprio output utilizzando qualcosa di simile [c]hrome, ad es smem -tkP '[c]hrome'. Questo funziona abbinando l' cinterno delle parentesi quadre e non le parentesi stesse.
wjandrea,

3

Sono sicuro che non è la soluzione migliore, funziona ancora per me:

#!/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: cambia [/]opt/google/chrome/chromein qualcosa di appropriato per il tuo sistema, ad esempio se sei su Mac OS X (funzionerà semplicemente grep "chrome").


1
Questo "funziona" in quanto stampa un numero. Tuttavia, questo numero non è poi così utile poiché la memoria condivisa tra più processi viene contata più volte.
Gilles 'SO- smetti di essere malvagio' il

Immagino in realtà sia ancora abbastanza buono perché Chrome è di gran lunga il più grande porco di memoria sui desktop tipici e quando si uccidono i processi di Chrome il sistema diventa incredibilmente veloce.
Sridhar Sarnobat,

Perché due awkcomandi? Cioè, perché non solo ... | awk '{sum += $6} END {print sum}'?
wjandrea,

2
FWIW, ecco una versione più breve e più chiara:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea,

1
@Rushi Non preoccuparti. Questa soluzione non fornisce un numero significativo. Utilizzare smemper la risposta migliore. Sebbene FWIW, lo implementerei come script o funzione, poiché è troppo complesso per un alias.
wjandrea,

2

Eseguendo questo:

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

occupa 1,8 GB di RAM. Quindi ti aspetteresti di eseguire questo:

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

richiederebbe 16 volte di più. Ma non lo fa.

Ciò è dovuto all'intelligente copia-scrittura-scrittura del kernel Linux: poiché il contenuto di '$ a' non cambia, la memoria di '$ a' può essere condivisa. Ma rimarrà condiviso fino a quando "$ a" non verrà modificato. Quando ciò accade, la sezione modificata verrà copiata e inizierà a occupare la RAM.

Non so se sia possibile misurare la quantità di memoria occupata da copia su scrittura. Ma almeno questo spiega il tuo conteggio eccessivo.


0

Calcola rapidamente la somma dei processi.

Su Mac :

  • vai a chrome://system/e seleziona tutto riportato in mem_usage
  • incolla in SublimeText
  • SelectAll (CMD + 'A') e SelectAllLines (CMD + SHIFT + 'L')
  • CMD + Destra (vai a eol), Backspace, Backspace, Backspace, ALT + Sinistra, CMD + Backspace
  • Backspace, digitare '+', CMD + 'A', CMD + 'C'
  • apri Terminale , esegui python, CMD + V, Invio

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

PS: ninja scorciatoia e giocatori degli anni '80 / '90 non dovrebbero avere problemi con questa soluzione 🤖🕹💾


0

Ho trovato una soluzione con vim e awk. Apri chrome: // system, espandi mem_usage, copia su vim ed esegui regexp:

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

Questo lascia solo i numeri prima di MB. Salvare il file ed eseguirlo

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

Non sono riuscito a convertire il codice regexp vim in sed.


0

C'è USS che è disponibile su più piattaforme

USS (Unique Set Size) è la memoria che è unica per un processo e che verrebbe liberata se il processo fosse terminato in questo momento.

psutil> 4.0 La libreria Python può accedervi

Ecco, lo userei

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

dove pid = 292 è il PID della maggior parte del processo esterno da Activity Monitor


-1

Sapevo che chrome / chromium aveva un task manager, ma non fornisce la memoria totale utilizzata. Si scopre che il link "Statistiche per nerd" nel task manager porta a chrome: // memory-redirect / che elenca la memoria totale utilizzata. Sarebbe bello avere una convalida esterna di questi numeri, così come un modo per ottenere le informazioni sulla riga di comando in modo da poter fare di più, ma questo sembra essere il modo migliore disponibile.


2
Questa risposta non è più valida. Vedi bugs.chromium.org/p/chromium/issues/detail?id=588790
eddygeek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.