Как просмотреть суммарное использование памяти группами команд (вместо процессов)

10

Есть ли способ сгруппировать похожие процессы при использовании таких инструментов, как top / htop? Иногда я просто хочу узнать, что съедает мою память, и некоторые программы (в основном браузеры) используют несколько процессов, что затрудняет определение объема оперативной памяти, которую они реально используют.

До сих пор я придумал только что-то подобное:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc
Корда
источник

Ответы:

7

Вы можете использовать ps -Cтолько для отображения информации о процессе для определенного имени команды.

например

ps -C opera

Затем вы можете использовать другие psпараметры, чтобы извлечь только те данные, которые вы ищете. В частности, hили --no-headersдля подавления заголовков столбцов, и -o pmemдля отображения процента памяти, используемой процессом.

ps -C opera --no-headers -o pmem

Это даст вам процент использования памяти, по одному на строку.

Существует множество методов для суммирования данных, подобных этому, один из методов, которые я часто использую, состоит в том, чтобы передать их в xargs для преобразования в одну строку с элементами, разделенными пробелами, затем в sed для преобразования пробелов в +символы и затем в bcвыполнение расчет. Ваш метод подачи в paste -sd+работу, а также или, возможно, лучше, чем | xargs | sed.

Собрав все это вместе, вы получите:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

или

ps -C opera --no-headers -o pmem | paste -sd+ | bc

Другими словами, вы можете использовать ps -Cвместо нескольких greps, если вы просто хотите получить данные об одной конкретной запущенной программе.

ПРИМЕЧАНИЕ. Вы можете использовать несколько -Cопций в одной командной строке, если вам нужна информация о нескольких программах одновременно. например

ps -C iceweasel -C chromium -C opera
саз
источник
Yay, первый человек, который действительно понял / прочитал мой вопрос!
Корда
Единственная проблема, с которой я сталкиваюсь при таком подходе, состоит в том, что некоторые программы имеют одну и ту же команду, и все же я не хотел бы группировать их (например, Java ... и, поскольку я являюсь Java-разработчиком, у меня обычно работает как минимум несколько Java-программ). Я думаю, что нет идеального решения ...
Корда
всегда есть, ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...например, искать Java-программу под названием foo.
Cas
0

Вы можете сделать сценарий оболочки

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

Это даст наивысшее использование памяти.

RahulAN
источник
Я пытался заставить это работать, и это не дало мне интересные результаты. Например, он показывает только одну программу, и она не занимает большую часть памяти
korda
Это? Ну, вы хотите что-то вроде верха ?? если да, то вы можете изменить скрипт с задержкой в ​​2 или 1 секунду и запустить то же самое через некоторое время или для. Для меня это показывает наибольшее использование памяти приложения в то время, когда я запускаю этот скрипт. какие вещи вы пробуете, просто запустите: ps af -o pmem, cmd | sort -r Это даст вам приложение с самым высоким потреблением
памяти
Это не работает для меня. Я думаю, причина в том, что сортировка включает в себя ведущие пробелы
корда
Вы имеете в виду, что вы не получаете правильное название процесса ??
Рахулан
Да, потому что ps добавляет пробелы для отступов. Когда у одного процесса есть использование двух цифр, значения использования одной цифры будут иметь отступ и начнутся с начального пробела. Я думаю, что добавление чего-то вроде sed -e 's/^[[:space:]]*//'должно исправить это. Также ваш сценарий добавляет использование памяти процессами с той же командой?
Корда
0

Изнутри сверху вы можете использовать следующее:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

Вы также можете попробовать:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

Эта команда даст 5 лучших процессов по использованию памяти.

Я надеюсь, что вы найдете эту информацию полезной!

Павел
источник
0

Это можно упростить с помощью termql .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

Обратите внимание, что в настоящее время он не загружается в PyPI , а также может быть установлен только для всей системы ( setup.pyнемного сломан), например sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

SAAJ
источник