@lergus

Как поcчитать сумарный объем памяти занятый процессами пользователя в терминале?

Собственно не могу разобраться как работать из терминала с таблицами и масивами.

Есть debian 8 с xfce и хочется видеть кто из пользоватлей сожрал больше всего памяти.
Подскажите куда копать?
У меня получилось чтото страшное.
function kill_user {
rm ~/user.txt
  for item in `ps -eo user,rss,cmd | grep X11rdp |awk '{print($1)}'` #отбираем пользователей
  do
echo `ps -eo user,rss,cmd | grep $item |awk '{ SUM += $2 } END { print SUM }'` $item >> ~/user.txt #Считаем память по каждому
done
#printf $user
mem_user=`cat ~/user.txt | sort -rg | head -n1 | awk '{print($2)}'` #Сортируем и оставляем самого прожорливого
#echo "Память жрет $mem_user - он будет наказан"
kill `ps -eo pid,user,cmd | grep X11rdp |grep $mem_user |awk '{print($1)}'` #Убиваем
}

if ((`free | awk '/Mem/  {print$4}'` <  700000)); #При проблемах с памятью убиваем самых прожорливых
then 
kill_user
#else
#echo "пока рано"
fi
  • Вопрос задан
  • 827 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Gintoki
Можно сделать как-то так:
ps -eo uid,pmem | grep "UID требуемого пользователя" | awk '{ SUM += $2 } END { print SUM }'

Эта несложная комбинация покажет суммарное использование ОЗУ конкретным пользователем.
Дальше можно написать простенький скрипт, который перебирал бы всех пользователей и записывал результат в файл, для последующего разбора.
PS. Есть, как минимум, одно "но!". Если искомый uid будет меньше сотни (какой-нибудь системный пользователь), то grep может дать погрешность (возможно даже сильную) при выборке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы