LINUX.ORG.RU

Логировать использование %MEM %CPU для для заданных процессов

 , , ,


0

1

Нужен инструмент для который периодически дозаписывает в файл (не существенно в какой форме) данные использования %CPU и %MEM для процессов по имени (как в pgrep для вычисления PID). Нужно чтоб каже на лету подхватывались новые процессы с таким именем. Прикольно бы было если бы можно было бы логгировать просто процессы по условию «тои-5 использующих CPU и top-5 использующих MEM».

Надо чтоб инструмент был простой, так как для одно-дву-разового использования (т.е. не nagios). Иначе просто могу соорудить таковой сам из говна и палок bash и top.

Подскажите пожалуйста.

Пакет sysstat должен тебе подойти. В нём есть утилита pidstat, которая выводит статистику использования ресурсов конкретными процессами, и умеет давать вывод с заданным интервалом.

spijet ★★★
()

А просто скрипт на баше не подойдет?

Niroday
()
Ответ на: комментарий от spijet

Кстати, весьма странные показания у этой утилки. Запущен ffmpeg с перекодированием большого файла.

ps -eo %cpu,%mem,pid,cmd | grep $(pidof ffmpeg)
 338  0.7  5044 ffmpeg -i film.avi -sn -b:a 128k -b:v 600k -c:a aac -c:v libx264 film.mp4

pidstat -p $(pidof ffmpeg)
Linux 4.14.12-1-ARCH	01/11/2018 	_x86_64_	(4 CPU)

03:17:01 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
03:17:01 PM  1000      5460    0.17    0.00    0.00    0.17     0  ffmpeg

P.S. По ману пробежался бегло, может не заметил какой-то аргумент для корректного вывода.

Niroday
()
Ответ на: комментарий от spijet

Да, так верно выводит.

pidstat -p $(pidof ffmpeg) 5 5
Linux 4.14.12-1-ARCH  	01/11/2018 	_x86_64_	(4 CPU)

04:46:01 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
04:46:06 PM  1000     16002  100.00    2.40    0.00  100.00     2  ffmpeg
04:46:11 PM  1000     16002  100.00    1.60    0.00  100.00     2  ffmpeg
04:46:16 PM  1000     16002  100.00    1.80    0.00  100.00     1  ffmpeg
04:46:21 PM  1000     16002  100.00    2.40    0.00  100.00     3  ffmpeg

Niroday
()
Ответ на: комментарий от Niroday

А всё потому, что в линуксе время CPU исчисляется какими-то «jiffies», которые надо считать. Я целиком концепт так и не понял, но с первого взгляда напоминает SNMP-счётчики, которые всё время растут, и по «скорости» их роста (читай, производной) можно найти искомую величину.

spijet ★★★
()
Последнее исправление: spijet (всего исправлений: 1)
Ответ на: комментарий от spijet

Получается нужно исходить из разницы во времени между измерениями процессорного времени и отношения разницы текущего к предыдущему к какому-то из них за указанный промежуток, при том, что внутри промежутка несколько тактов обновления, если я правильно понял.

Niroday
()
Ответ на: комментарий от Niroday

Что-то типа того, да. Простейшим вариантом будет посчитать дельту между двумя значениями, а потом поделить на время между взятыми отсчётами. Но я могу ошибаться.

spijet ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.