Допустим, у меня есть 20 пользователей, вошедших в мою коробку Linux. Как я могу узнать, сколько памяти использует каждый из них?
20
Вы можете попробовать использовать smem (см. ELC2009: Визуализация использования памяти с помощью smem для получения дополнительной информации). В частности, sudo smem -u
должен дать вам информацию, которую вы хотите.
--no-install-recommends
.Игнорируя проблемы с общей памятью, вот быстрый скрипт, который дает вам RSS и VMEM для всех вошедших в систему пользователей, сортирует по vmem и разбивает на симпатичные столбцы:
источник
Чтобы получить сумму RSS, я думаю, что следующие работы. Это будет для получения суммы RSS для пользователей kbrandt и root.
источник
Это сложный вопрос. Вы можете легко суммировать общее количество RSS + подкачки в выводе "ps", но как насчет общей памяти? Разные пользователи могут легко использовать одну и ту же кодовую страницу, если они запускают один и тот же процесс. Кому вы это объясняете? А как насчет буферов и кеша? Это действительно зависит от того, насколько точным вы хотите, чтобы ваши результаты были. Чем точнее вы хотите, тем сложнее будет.
источник
Я не уверен, как сообщить об использовании памяти пользователем, но если вы беспокоитесь об управлении его использованием, то вам следует поискать ulimit. Это позволит вам установить жесткие и мягкие ограничения для каждого пользователя / группы для памяти и других ресурсов в вашей системе.
источник
Вы можете попробовать что-то вроде:
источник
ps aux | grep mysql | awk '{memory +=$4}; END {print memory }'
, где mysql может быть заменен именем пользователя или процесса.В поисках того же я разобрался с этим
для печати процессов, упорядоченных по mem, сгруппированных по пользователю (колонка 1, $ 1), вы можете группировать по другим вещам и суммировать другие вещи, изменяя $ 1 и $ 4
Я был рад найти решение, просто хотел поделиться.
источник
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]}}' | sort -nk2
. Команде sort нужен-n
флаг, чтобы она анализировала память как число. Также таким образом вы можете заменить слово «пользователь» словом «команда», чтобы группировать по имени приложения.Этот сценарий bash, вероятно, ужасен, но спасибо за упражнение, мой bash стал (становится) ржавым!
Результат:
Пожалуйста, прокомментируйте / исправьте, и я обновлю ответ. Также я использую вывод памяти rss от PS, поскольку другие обсуждали, что есть плюсы / минусы использования этого значения.
источник
SEMM не был доступен в моей системе, и сценарий Дэйва по какой-то причине не работал, поэтому я написал этот уродливый Perl-oneliner для обработки вывода ps:
Обратите внимание, что некоторые пользователи были идентифицированы по их UID, а не по имени пользователя. Вы можете справиться с этим, проанализировав имена пользователей из / etc / passwd, используя uglier:
источник
Использование Bash Script
ВЫХОД
источник
Вы можете получить UID,
/etc/passwd
чтобы сделать это для всех пользователейисточник
Что ж, в этом состоянии ядра Linux я могу придумать только один правильный способ решения этой задачи - использование cgroups памяти. Вам нужно будет ввести пользователя при входе в собственную группу, и для этого может потребоваться разработка собственного модуля pam или (скорее) изменение существующего модуля для этого.
Полезный документ для прочтения: Руководство по управлению ресурсами от RedHat®.
источник