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?
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?
Risposte:
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
chrom
con il percorso completo, ad es. /opt/google/chrome
o/usr/lib64/chromium-browser
-P firefox
sudo smem
per quello.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.
chrome
invece che solo chorm
perché se esegui sia il cromo che il cromo, vedresti il totale per entrambi.
smem
dal proprio output utilizzando qualcosa di simile [c]hrome
, ad es smem -tkP '[c]hrome'
. Questo funziona abbinando l' c
interno delle parentesi quadre e non le parentesi stesse.
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/chrome
in qualcosa di appropriato per il tuo sistema, ad esempio se sei su Mac OS X (funzionerà semplicemente grep "chrome"
).
awk
comandi? Cioè, perché non solo ... | 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
per la risposta migliore. Sebbene FWIW, lo implementerei come script o funzione, poiché è troppo complesso per un alias.
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.
Calcola rapidamente la somma dei processi.
Su Mac :
chrome://system/
e seleziona tutto riportato in mem_usagepython
, CMD + V, InvioEt voilà! "Facile" ... 🤓😅
PS: ninja scorciatoia e giocatori degli anni '80 / '90 non dovrebbero avere problemi con questa soluzione 🤖🕹💾
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.
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
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.