Uzyskaj całkowite wykorzystanie pamięci chrome

28

Ponieważ Google Chrome / chromium spawnuje wiele procesów, trudniej jest zobaczyć, ile całkowitej pamięci zajmują te procesy.

Czy istnieje prosty sposób na sprawdzenie, ile całkowitej pamięci zajmuje seria połączonych procesów?

Ryan1729
źródło
Jeśli przekonwertuję liczby drukowane z KiB na GiB, to nawet dla Res. Pamięć Dostaję więcej niż ilość pamięci RAM maszyny i swap. Wygląda więc na to, że coś się liczy.
Ryan1729,

Odpowiedzi:

30

Biorąc pod uwagę, że Google zabił pamięć chrome: // memory w marcu 2016 r., Teraz używam 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
  • aby być dokładniejszym, zastąp chrompełną ścieżką, np. /opt/google/chromelub/usr/lib64/chromium-browser
  • działa to tak samo dla firefoxa wieloprocesowego (e10s) z -P firefox
  • bądź ostrożny, smem zgłasza się na wyjściu, dodatkowe ~ 10-20M w moim systemie.
  • w przeciwieństwie do góry, potrzebuje dostępu do roota, aby dokładnie monitorować procesy rootowania - użyj sudo smemtego.
  • zobacz tę odpowiedź SO, aby uzyskać więcej informacji na temat tego, dlaczego smem jest dobrym narzędziem i jak odczytać wynik.
eddygeek
źródło
Nie jestem pewien, czy to działa dla mnie. Po uruchomieniu drugiego polecenia zwracana jest wartość 338.0M. To jest za niskie. Po uruchomieniu Monitora systemu widzę, że istnieje 11 procesów chrome i każdy zajmuje od 70 MB do 400 MB pamięci RAM. Nie jestem pewien, czy Monitor systemu raportuje niepoprawnie, czy nie.
sixtyfootersdude
Ten sam problem dla smem w dystrybucji Kali Linux 2017.1, wyjście to 800 milionów pamięci RAM używanej przez chrome z 5 wystąpieniami i co najmniej 30 kartami ... I monitor systemu też nie zgadza się z smemem. Czy ktoś znalazł rozwiązanie tego problemu? (Dzięki za odpowiedź i referencje)
matthieusb
1
Twoje komentarze zasługują na osobne pytanie (z pełną wydajnością programów w konflikcie). Wystarczy opublikować link w komentarzu.
eddygeek
1
Użyłbym chromezamiast tego tylko chormdlatego, że jeśli używasz zarówno chromu, jak i chromu, zobaczysz sumę dla obu.
RJ
1
Możesz wykluczyć smemz własnego wyjścia, używając czegoś takiego jak [c]hromenp smem -tkP '[c]hrome'. Działa to poprzez dopasowanie cwewnętrznych nawiasów kwadratowych, a nie samych nawiasów.
wjandrea
3

Jestem pewien, że nie jest to najlepsze rozwiązanie, ale nadal działa dla mnie:

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

Uwaga: zmień na [/]opt/google/chrome/chromecoś odpowiedniego dla twojego systemu, np. Jeśli korzystasz z Mac OS X (po prostu grep "chrome"będzie działać).

Lew Bystritskiy
źródło
1
To „działa”, ponieważ wypisuje liczbę. Jednak ta liczba nie jest aż tak przydatna, ponieważ pamięć współdzielona przez kilka procesów jest liczona wiele razy.
Gilles „SO - przestań być zły”,
Wydaje mi się, że w rzeczywistości jest wystarczająco dobry, ponieważ Chrome jest zdecydowanie największą pamięcią na typowych komputerach stacjonarnych, a kiedy zabijasz procesy Chrome, twój system szybko płonie.
Sridhar Sarnobat,
Dlaczego dwa awkpolecenia? To znaczy, dlaczego nie tylko ... | awk '{sum += $6} END {print sum}'?
wjandrea,
2
FWIW, oto krótsza, bardziej przejrzysta wersja:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea,
1
@Rushi Nie przejmuj się. To rozwiązanie nie podaje znaczącej liczby. Użyj smemwedług najwyższej odpowiedzi. Chociaż FWIW, zaimplementowałbym go jako skrypt lub funkcję, ponieważ jest zbyt skomplikowany dla aliasu.
wjandrea
2

Uruchamianie tego:

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

zajmuje 1,8 GB pamięci RAM. Więc możesz się spodziewać uruchomienia tego:

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

zajęłoby 16 razy więcej. Ale tak nie jest.

Wynika to z inteligentnego kopiowania przy zapisie przez jądro Linuksa: Ponieważ zawartość „$ a” nie zmienia się, pamięć „$ a” może być współdzielona. Ale pozostanie udostępniony tylko do momentu zmiany „$ a”. Kiedy to nastąpi, zmieniona sekcja zostanie skopiowana i zacznie zajmować pamięć RAM.

Nie wiem, czy można zmierzyć, ile pamięci jest przepełnione przy kopiowaniu przy zapisie. Ale to przynajmniej tłumaczy twoje przeludnienie.

Ole Tange
źródło
0

Wystarczy szybko obliczyć sumę procesów.

Na komputerze Mac :

  • przejdź do chrome://system/i wybierz wszystkie zgłoszone w mem_usage
  • wklej w SublimeText
  • SelectAll (CMD + „A”) i SelectAllLines (CMD + SHIFT + „L”)
  • CMD + prawo (przejdź do eol), Backspace, Backspace, Backspace, ALT + Left, CMD + Backspace
  • Cofnij, wpisz „+”, CMD + „A”, CMD + „C”
  • otwórz Terminal , uruchom python, CMD + V, Enter

Gotowe! „Łatwy” ... 🤓😅

PS - Skróty ninja i lata 80. / 90. Gracze walczący nie powinni mieć problemu z tym rozwiązaniem 🤖🕹💾

Kamafeather
źródło
0

Znalazłem rozwiązanie z vimem i awk. Otwórz chrome: // system, rozwiń mem_usage, skopiuj do vima i uruchom wyrażenie regularne:

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

Pozostawia to tylko liczby przed MB. Zapisz plik i uruchom

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

Nie mogłem przekonwertować kodu regularnego vim na sed.

szwec
źródło
0

Istnieje USS, który jest dostępny na różnych platformach

USS (Unique Set Size) to pamięć, która jest unikalna dla procesu i która zostałaby uwolniona, gdyby proces został zakończony w tej chwili.

psutil> 4.0 biblioteka Python może uzyskać do niej dostęp

Oto użyłbym tego

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

gdzie pid = 292 jest PID najbardziej zewnętrznego procesu z Monitora aktywności

gadelat
źródło
-1

Wiedziałem, że chrome / chromium ma menedżera zadań, ale nie daje całkowitej wykorzystanej pamięci. Okazuje się, że link „Statystyki dla frajerów” w menedżerze zadań prowadzi do chrome: // memory-redirect /, która wyświetla całkowitą wykorzystaną pamięć. Byłoby miło mieć zewnętrzną weryfikację tych liczb, a także sposób uzyskania informacji w wierszu poleceń, aby można było z tym zrobić więcej, ale wydaje się, że jest to najlepszy dostępny sposób.

Ryan1729
źródło
2
Ta odpowiedź nie jest już aktualna. Zobacz bugs.chromium.org/p/chromium/issues/detail?id=588790
eddygeek