Dapatkan total penggunaan memori chrome

28

Karena google chrome / chromium menelurkan banyak proses, lebih sulit untuk melihat jumlah total memori yang digunakan proses ini secara total.

Apakah ada cara mudah untuk melihat berapa total memori yang digunakan oleh serangkaian proses yang terhubung?

Ryan1729
sumber
Jika saya mengonversi angka yang dicetak dari KiB ke GiB maka bahkan untuk Res. Memori saya mendapatkan lebih dari jumlah RAM ditambah swap mesin. Jadi sepertinya ada sesuatu yang berlebihan.
Ryan1729

Jawaban:

30

Mengingat bahwa google kill chrome: // memory pada Maret 2016, saya sekarang menggunakan 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
  • untuk menjadi lebih akurat ganti chromdengan path lengkap misalnya /opt/google/chromeatau/usr/lib64/chromium-browser
  • ini bekerja sama untuk multiproses dengan firefox (e10s) dengan -P firefox
  • hati-hati, smem melaporkan sendiri dalam output, tambahan ~ 10-20 juta pada sistem saya.
  • tidak seperti top itu membutuhkan akses root untuk secara akurat memonitor proses root - gunakan sudo smemuntuk itu.
  • lihat jawaban SO ini untuk detail lebih lanjut tentang mengapa smem adalah alat yang baik dan cara membaca output.
eddygeek
sumber
Saya tidak yakin ini bekerja untuk saya. Ketika saya menjalankan perintah kedua, saya mendapatkan nilai kembali 338.0M. Ini terlalu rendah. Ketika saya menjalankan Monitor Sistem, saya dapat melihat bahwa ada 11 proses chrome dan masing-masing mengambil antara 70MB dan 400MB RAM. Tidak yakin apakah Monitor Sistem melaporkan salah atau tidak.
sixtyfootersdude
Masalah yang sama untuk smem pada distribusi Kali Linux 2017.1, outputnya adalah 800Mo ram yang digunakan oleh chrome dengan 5 instance dan setidaknya 30 tab ... Dan monitor sistem juga tidak setuju dengan smem. Adakah yang menemukan solusi untuk ini? (Terima kasih atas jawabannya dan rujukannya)
matthieusb
1
Komentar Anda layak mendapatkan pertanyaan terpisah (dengan hasil penuh dari program yang bertentangan). Cukup kirim tautan di komentar.
eddygeek
1
Saya akan menggunakan chromesebagai ganti hanya chormkarena jika Anda menjalankan chrome dan chromium, Anda akan melihat total untuk keduanya.
RJ
1
Anda dapat mengecualikan smemdari outputnya sendiri dengan menggunakan sesuatu seperti [c]hrome, mis smem -tkP '[c]hrome'. Ini berfungsi dengan mencocokkan bagian cdalam tanda kurung siku dan bukan tanda kurung itu sendiri.
wjandrea
3

Saya yakin itu bukan solusi terbaik, tetap bekerja untuk saya:

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

Catatan: ubah [/]opt/google/chrome/chromeke sesuatu yang sesuai untuk sistem Anda, mis. Jika Anda menggunakan Mac OS X (hanya grep "chrome"akan berfungsi).

Lev Bystritskiy
sumber
1
Ini "bekerja" karena mencetak angka. Namun jumlah ini tidak terlalu berguna karena memori yang dibagi antara beberapa proses dihitung beberapa kali.
Gilles 'SANGAT berhenti menjadi jahat'
Saya membayangkan pada kenyataannya itu masih cukup baik karena Chrome sejauh ini merupakan memory hog terbesar di desktop biasa dan ketika Anda membunuh proses chrome sistem Anda menjadi sangat cepat.
Sridhar Sarnobat
Mengapa dua awkperintah? Artinya, mengapa tidak adil ... | awk '{sum += $6} END {print sum}'?
wjandrea
2
FWIW, ini versi yang lebih singkat, lebih jelas:ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
wjandrea
1
@Rushi Jangan repot-repot. Solusi ini tidak memberikan angka yang berarti. Gunakan smemper jawaban teratas. Meskipun FWIW, saya akan mengimplementasikannya sebagai skrip atau fungsi, karena terlalu kompleks untuk sebuah alias.
wjandrea
2

Menjalankan ini:

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

membutuhkan RAM 1,8GB. Jadi Anda akan mengharapkan menjalankan ini:

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

akan memakan waktu 16 kali lipat. Tapi ternyata tidak.

Ini disebabkan oleh copy-on-write cerdas kernel Linux: Karena konten '$ a' tidak berubah, maka memori '$ a' dapat dibagikan. Tetapi itu hanya akan dibagikan sampai '$ a' diubah. Ketika itu terjadi, bagian yang diubah akan disalin dan mulai mengambil RAM.

Apakah Anda bisa mengukur berapa banyak memori yang dikomit copy-on-write, saya tidak tahu. Tapi setidaknya ini menjelaskan perhitungan Anda yang berlebihan.

Ole Tange
sumber
0

Cukup cepat hitung jumlah prosesnya.

Di Mac :

  • buka chrome://system/dan pilih semua yang dilaporkan dalam mem_usage
  • rekatkan di SublimeText
  • SelectAll (CMD + 'A') dan SelectAllLines (CMD + SHIFT + 'L')
  • CMD + Kanan (pergi ke eol), Backspace, Backspace, Backspace, ALT + Kiri, CMD + Backspace
  • Backspace, ketik '+', CMD + 'A', CMD + 'C'
  • buka Terminal , jalankan python, CMD + V, Enter

Et voila! "Mudah" ... 🤓😅

PS - Ninja Shortcut & 80-an / 90-an Para pemain game seharusnya tidak memiliki masalah dengan solusi ini 🤖🕹💾

Kamafather
sumber
0

Saya menemukan solusi dengan vim dan awk. Buka chrome: // sistem, perluas mem_usage, salin ke vim dan jalankan regexp:

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

Ini hanya menyisakan angka sebelum MB. Simpan file dan jalankan

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

Saya tidak dapat mengonversi kode regexp vim ke sed.

swedia
sumber
0

Ada USS yang tersedia lintas platform

USS (Unique Set Size) adalah memori yang unik untuk suatu proses dan yang akan dibebaskan jika proses dihentikan sekarang.

psutil> 4.0 Python library dapat mengaksesnya

Di sini saya akan menggunakannya

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

di mana pid = 292 adalah PID dari sebagian besar proses luar dari Activity Monitor

Gadelat
sumber
-1

Saya tahu bahwa chrome / chromium memiliki task manager, tetapi tidak memberikan total memori yang digunakan. Ternyata tautan "Stats for nerds" di task manager mengarah ke chrome: // memory-redirect / yang memuat daftar total memori yang digunakan. Akan lebih baik untuk memiliki validasi eksternal dari angka-angka ini, serta cara untuk mendapatkan informasi pada baris perintah sehingga lebih banyak yang dapat dilakukan dengan itu, tetapi ini tampaknya menjadi cara terbaik yang tersedia.

Ryan1729
sumber
2
Jawaban ini sudah tidak berlaku lagi. Lihat bugs.chromium.org/p/chromium/issues/detail?id=588790
eddygeek