Наблюдение за процессами при помощи pidstat






Когда в системе творится что-то неладное, поиск причин начинается, как правило, с анализа поведения процессов, чтобы отыскать пожирателей системный ресурсов. Думаю, многие из вас пользуются замечательными утилитами top и htop, позволяющих выполнять мониторинг использования ресурсов процессами, в то время как об утилите pidstat, мне кажется, слышали немногие. Её нельзя рассматривать в качестве замены вышеупомянутым top и htop, а скорее как полезное дополнение к ним на случаи, когда вам необходимо собрать статистику по одному или нескольким процессам за определённый промежуток времени.

Activity Monitor


pidstat является одной из компонент семейства утилит sysstat, поэтому имя репозитория в вашем дистрибутиве будет, скорее всего, именно sysstat. В ныне используемом мной ArchLinux пакет sysstat был легко установлен командой:

sudo pacman -S sysstat

Простой запуск

Как уже было сказано, pidstat предназначена для сбора и вывода статистики использования ресурсов процессами. Для того, чтобы указать, какие процессы вас интересуют, используется флаг -p, аргументами которого должны быть PID нужных процессов, перечисленных через запятую, или ключевое слово ALL, если требуется информация обо всех процессах. После определения всех флагов pidstat принимает два параметра: первый — это интервал в секундах, в течение которого происходит сбор статистики, а второй — количество выводимых отчётов. Второй параметр может быть опущен; в этом случае pidstat будет выводить отчёты до тех пор, пока вы не прервёте её.

Например, для того, чтобы определить количество выделяемых ресурсов процессам с PID 611 и 1102 в течение 10 секунд и вывести один отчёт, можно использовать следующую команду:

pidstat -p 611,1102 10 1

после выполнения которой вы получите примерно следующий вывод:

Linux 3.6.11-1-ARCH (ad) 	01/21/2013 	_i686_	(2 CPU)

04:14:29 AM       PID    %usr %system  %guest    %CPU   CPU  Command
04:14:39 AM       611    1.00    1.40    0.00    2.40     0  skype
04:14:39 AM      1102    0.70    0.80    0.00    1.50     1  firefox
Average:          PID    %usr %system  %guest    %CPU   CPU  Command
Average:          611    1.00    1.40    0.00    2.40     -  skype
Average:         1102    0.70    0.80    0.00    1.50     -  firefox

Средние значения, приведённые в конце отчёта, особого смысла не имеют в случае, когда pidstat отрабатывает один цикл, но весьма полезны, если вы запускаете утилиту на несколько «проходов»:

pidstat -p 611,1102 10 5
Linux 3.6.11-1-ARCH (ad) 	01/21/2013 	_i686_	(2 CPU)

04:21:24 AM       PID    %usr %system  %guest    %CPU   CPU  Command
04:21:34 AM       611    1.30    1.20    0.00    2.50     0  skype
04:21:34 AM      1102    0.70    0.70    0.00    1.40     1  firefox

04:21:34 AM       PID    %usr %system  %guest    %CPU   CPU  Command
04:21:44 AM       611    0.90    1.50    0.00    2.40     0  skype
04:21:44 AM      1102    1.10    0.60    0.00    1.70     0  firefox

04:21:44 AM       PID    %usr %system  %guest    %CPU   CPU  Command
04:21:54 AM       611    1.00    1.20    0.00    2.20     0  skype
04:21:54 AM      1102    1.70    0.80    0.00    2.50     1  firefox

04:21:54 AM       PID    %usr %system  %guest    %CPU   CPU  Command
04:22:04 AM       611    1.20    1.20    0.00    2.40     0  skype
04:22:04 AM      1102    8.00    1.90    0.00    9.90     1  firefox

04:22:04 AM       PID    %usr %system  %guest    %CPU   CPU  Command
04:22:14 AM       611    1.20    1.20    0.00    2.40     0  skype
04:22:14 AM      1102   12.10    1.90    0.00   14.00     1  firefox
Average:          PID    %usr %system  %guest    %CPU   CPU  Command
Average:          611    1.12    1.26    0.00    2.38     -  skype
Average:         1102    4.72    1.18    0.00    5.90     -  firefox

Выбор типов ресурсов для мониторинга

По умолчанию утилита в отчётах сообщает об использовании процессорного времени. При помощи флага -d её можно заставить выводить статистику ввода/вывода:

pidstat -p 1102 -d 10 1
Linux 3.6.11-1-ARCH (ad) 	01/21/2013 	_i686_	(2 CPU)
04:29:30 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:29:45 AM      1102      9.33    580.80      0.00  firefox
Average:         1102      9.33    580.80      0.00  firefox

При помощи флага -r можно получить статистику использования оперативной памяти:

pidstat -p 1102 -r 10 1
Linux 3.6.11-1-ARCH (ad) 	01/21/2013 	_i686_	(2 CPU)
04:31:49 AM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
04:32:04 AM      1102   3430.73      0.93 1182224 538580  26.04  firefox
Average:         1102   3430.73      0.93 1182224 538580  26.04  firefox

Фильтрация процессов по имени

pidstat позволяет выбирать процессы не по PID, а по имени или его части, используя подстроку или регулярное выражение. Например, статистика по процессам, чьи имена начинаются на 's':

pidstat -C ^s 15 1
pidstat -C ^s 15 1
Linux 3.6.11-1-ARCH (ad) 	01/21/2013 	_i686_	(2 CPU)

04:45:55 AM       PID    %usr %system  %guest    %CPU   CPU  Command
04:46:10 AM       611    0.87    1.53    0.00    2.40     0  skype
04:46:10 AM      5352    0.07    0.07    0.00    0.13     1  scdaemon
04:46:10 AM      8939    0.00    0.13    0.00    0.13     0  soffice.bin
Average:          PID    %usr %system  %guest    %CPU   CPU  Command
Average:          611    0.87    1.53    0.00    2.40     -  skype
Average:         5352    0.07    0.07    0.00    0.13     -  scdaemon
Average:         8939    0.00    0.13    0.00    0.13     -  soffice.bin

В заключение

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