Скрипт или команда для получения данных о потреблении памяти пользователем

Мой хост предлагает мне ограниченный объем оперативной памяти для моих веб-сайтов, и я хотел бы контролировать потребление памяти, запустив скрипт в cron.

Я составил эту команду:

ps -u xxxxxx -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'

Но то, как мой хост вычисляет память, имеет особенность. Он игнорирует процессы, которые выполняются менее 5 минут.

Знаете ли вы о команде или сценарии Python, которые могут показать мне общий объем используемой памяти, игнорируя недолговечные процессы?


person Vallieres    schedule 13.09.2011    source источник


Ответы (1)


Используйте etime, чтобы найти прошедшее время процесса. Затем вы можете изменить команду awk, чтобы проверить, превышает ли это время 5 минут.

ps -u xxxxxx -o rss,etime,command | ...

Формат прошедшего времени — [[dd-]hh:]mm:ss. Это означает, что время может быть 00:30, 12:57:39 или даже 4-08:27:12. Вы можете использовать awk для анализа этого формата времени и преобразования его в секунды. Один раз в секундах проверьте, не превышает ли это 5 минут, и если да, добавьте его к промежуточному итогу rss.

Вот пример скрипта, который это делает:

ps -u xxxxxx -o rss,etime,command | grep -v peruser | grep -v RSS | sed 's/^ *//g' | awk '{
 split($2,arr,":") #split time on :
 len=0
 for(i in arr) len++ 
 secs=arr[len]+60*arr[len-1] #convert to seconds
 if(len>2) secs=secs+substr(arr[len-2],length(arr[len-2])-1)*60*60

 if(secs>5*60) { #check if more than 5 minutes
     print $0 #print out the process
     sum+=$1 
 }
} END{print "SUM:"sum/1024}'
person dogbane    schedule 13.09.2011
comment
Я очень плохо разбираюсь в командах unix :( Не могли бы вы рассказать мне, как изменить мою команду awk и отфильтровать процессы с etime 5 минут или меньше? Спасибо! - person Vallieres; 15.09.2011
comment
Блин, я не получил уведомление о вашем ответе. Я протестирую ваш скрипт прямо сейчас и опубликую результаты завтра. Спасибо собачник! - person Vallieres; 23.09.2011