Поскольку Google Chrome / Chromium порождает несколько процессов, сложнее понять, сколько общей памяти используют эти процессы.
Есть ли простой способ узнать, сколько общей памяти использует ряд связанных процессов?
Поскольку Google Chrome / Chromium порождает несколько процессов, сложнее понять, сколько общей памяти используют эти процессы.
Есть ли простой способ узнать, сколько общей памяти использует ряд связанных процессов?
Ответы:
Учитывая, что Google убил chrome: // memory в марте 2016 года, я теперь использую 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
на полный путь, например /opt/google/chrome
или/usr/lib64/chromium-browser
-P firefox
sudo smem
для этого.338.0M
. Это слишком низко. Когда я запускаю System Monitor, я вижу, что есть 11 процессов Chrome, каждый из которых занимает от 70 до 400 МБ оперативной памяти. Не уверен, что системный монитор сообщает неправильно или нет.
chrome
вместо просто chorm
потому, что если вы используете и хром, и хром, вы увидите общее для обоих.
smem
из его собственного вывода, используя что-то вроде [c]hrome
, например smem -tkP '[c]hrome'
. Это работает путем сопоставления c
внутри квадратных скобок, а не самих скобок.
Я уверен, что это не лучшее решение, но у меня оно работает:
#!/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 }'
Примечание: измените на [/]opt/google/chrome/chrome
что-то подходящее для вашей системы, например, если вы используете Mac OS X (просто grep "chrome"
будет работать).
awk
команды? То есть почему не просто ... | 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
по верхнему ответу. Хотя FWIW, я бы реализовал его как скрипт или функцию, так как он слишком сложен для псевдонима.
Запуск этого:
perl -e '$a="x"x1000000000;sleep(10);print"done\n"'
занимает 1,8 ГБ ОЗУ. Так что вы ожидаете запустить это:
perl -e '$a="x"x1000000000;fork;fork;fork;fork;sleep(10);print"done\n"'
займет в 16 раз больше. Но это не так.
Это связано с интеллектуальным копированием при записи в ядре Linux: поскольку содержимое «$ a» не меняется, память «$ a» может быть разделена. Но он останется общим, пока не будет изменено «$ a». Когда это произойдет, измененный раздел будет скопирован и начнет занимать ОЗУ.
Можно ли измерить, сколько памяти переполнено при копировании при записи, я не знаю. Но, по крайней мере, это объясняет ваш перерасчет.
Просто быстро подсчитайте сумму процессов.
На Mac :
chrome://system/
и выбрать все сообщения в mem_usagepython
, CMD + V, EnterИ вуаля! "Легко" ... 🤓😅
PS - Сочетание ниндзя и 80-х / 90-х годов У игроков файтингов не должно быть проблем с этим решением 🤖🕹💾
Я нашел решение с помощью vim и awk. Откройте chrome: // system, разверните mem_usage, скопируйте в vim и выполните регулярное выражение:
:%s/\D*\(\d*\).MB.*/\1
Это оставляет только цифры до MB. Сохраните файл и выполните
cat file | awk '{sum += $1} END {print sum}'
Я не смог преобразовать код регулярного выражения vim в sed.
Есть USS, который доступен кроссплатформенный
USS (уникальный набор размеров) - это память, которая является уникальной для процесса и которая будет освобождена, если процесс был прерван прямо сейчас.
psutil> 4.0. Библиотека Python может получить к ней доступ
Вот я бы этим воспользовался
sudo python3 -c "import psutil;print(sum(p.memory_full_info().uss for p in psutil.Process(pid=292).children())/1024/1024);"
где pid = 292 - PID большинства внешних процессов из Activity Monitor
Я знал, что в chrome / chromium есть диспетчер задач, но он не дает общего объема используемой памяти. Оказывается, что ссылка «Статистика для ботаников» в диспетчере задач приводит к chrome: // memory-redirect /, который отображает общий объем используемой памяти. Было бы неплохо иметь внешнюю проверку этих чисел, а также способ получить информацию в командной строке, чтобы можно было сделать больше с ней, но, похоже, это лучший доступный способ.