Vì google chrome / crom sinh ra nhiều quá trình, thật khó để xem tổng số bộ nhớ mà các quá trình này sử dụng trong tổng số.
Có cách nào dễ dàng để xem tổng số bộ nhớ mà một loạt các quá trình được kết nối đang sử dụng không?
Vì google chrome / crom sinh ra nhiều quá trình, thật khó để xem tổng số bộ nhớ mà các quá trình này sử dụng trong tổng số.
Có cách nào dễ dàng để xem tổng số bộ nhớ mà một loạt các quá trình được kết nối đang sử dụng không?
Câu trả lời:
Cho rằng google đã giết chrome: // bộ nhớ vào tháng 3 năm 2016, tôi hiện đang sử dụng 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
bằng đường dẫn đầy đủ, ví dụ /opt/google/chrome
hoặc/usr/lib64/chromium-browser
-P firefox
sudo smem
cho điều đó.338.0M
. Đây là quá thấp. Khi tôi chạy System Monitor, tôi có thể thấy rằng có 11 quy trình chrome và mỗi quy trình đang chiếm từ 70MB đến 400 MB RAM. Không chắc chắn nếu System Monitor báo cáo không chính xác hay không.
chrome
thay vì chỉ chorm
vì nếu bạn đang chạy cả chrome và crom, bạn sẽ thấy tổng số cho cả hai.
smem
khỏi đầu ra của chính nó bằng cách sử dụng một cái gì đó như [c]hrome
, ví dụ smem -tkP '[c]hrome'
. Điều này hoạt động bằng cách khớp với c
bên trong dấu ngoặc vuông chứ không phải chính dấu ngoặc.
Tôi chắc chắn rằng đó không phải là giải pháp tốt nhất, nhưng nó vẫn hoạt động với tôi:
#!/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 }'
Lưu ý: thay đổi [/]opt/google/chrome/chrome
thành thứ gì đó phù hợp với hệ thống của bạn, ví dụ: nếu bạn đang dùng Mac OS X (đơn giản là grep "chrome"
nó sẽ hoạt động).
awk
lệnh? Đó là, tại sao không chỉ ... | 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
theo câu trả lời hàng đầu. Mặc dù FWIW, tôi sẽ triển khai nó dưới dạng tập lệnh hoặc hàm, vì nó quá phức tạp đối với bí danh.
Chạy này:
perl -e '$a="x"x1000000000;sleep(10);print"done\n"'
chiếm 1,8 GB RAM. Vì vậy, bạn sẽ mong đợi chạy này:
perl -e '$a="x"x1000000000;fork;fork;fork;fork;sleep(10);print"done\n"'
sẽ mất 16 lần như vậy. Nhưng nó không.
Điều này là do bản sao thông minh của nhân Linux: Vì nội dung của '$ a' không thay đổi, nên có thể chia sẻ bộ nhớ của '$ a'. Nhưng nó sẽ chỉ được chia sẻ cho đến khi '$ a' được thay đổi. Khi điều đó xảy ra, phần thay đổi sẽ được sao chép và bắt đầu chiếm RAM.
Tôi không biết liệu bạn có thể đo được bao nhiêu bộ nhớ khi sao chép quá mức mà tôi không biết. Nhưng ít nhất điều này giải thích cho việc đếm quá mức của bạn.
Chỉ cần nhanh chóng tính tổng của các quá trình.
Trên máy Mac :
chrome://system/
và chọn tất cả các báo cáo trong mem_usagepython
, CMD + V, EnterEt voila! "Dễ" ...
PS - Shortcut ninja & thập niên 80/90 Người chơi trò chơi chiến đấu không có vấn đề gì với giải pháp này
Tôi tìm thấy một giải pháp với vim và awk. Mở chrome: // system, mở rộng mem_usage, sao chép vào vim và thực thi regrec:
:%s/\D*\(\d*\).MB.*/\1
Điều này chỉ để lại những con số trước MB. Lưu tệp và thực thi
cat file | awk '{sum += $1} END {print sum}'
Tôi không thể chuyển đổi mã regrec vim sang sed.
Có USS có sẵn nhiều nền tảng
USS (Kích thước cài đặt duy nhất) là bộ nhớ duy nhất cho một quy trình và sẽ được giải phóng nếu quy trình này bị chấm dứt ngay bây giờ.
psutil> 4.0 Thư viện Python có thể truy cập nó
Đây là tôi sẽ sử dụng nó
sudo python3 -c "import psutil;print(sum(p.memory_full_info().uss for p in psutil.Process(pid=292).children())/1024/1024);"
Trong đó pid = 292 là PID của hầu hết quá trình bên ngoài từ Activity Monitor
Tôi biết rằng chrome / crom có trình quản lý tác vụ, nhưng nó không cung cấp tổng bộ nhớ được sử dụng. Nó chỉ ra rằng liên kết "Chỉ số cho mọt sách" trong trình quản lý tác vụ dẫn đến chrome: // memory-redirect / trong đó liệt kê tổng bộ nhớ được sử dụng. Sẽ rất tốt nếu có xác nhận bên ngoài của những con số này, cũng như một cách để có được thông tin trên dòng lệnh để có thể thực hiện được nhiều hơn với nó, nhưng đây có vẻ là cách tốt nhất hiện có.