Найти тему
Holpa

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

Оглавление

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

Ужасно не удобно что в Яндекс Дзен нельзя выбирать код, что бы подсвечивало его.

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

1 sudo pacman -S sysstat

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

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

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

1 pidstat -p 611,1102 10 1

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

1 2 3 4 5 6 7 8 9 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 отрабатывает один цикл, но весьма полезны, если вы запускаете утилиту на несколько «проходов»:

1 pidstat -p 611,1102 10 5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 её можно заставить выводить статистику ввода/вывода:

1 pidstat -p 1102 -d 10 1 1 2 3 4 5 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 можно получить статистику использования оперативной памяти:

1 pidstat -p 1102 -r 10 1 1 2 3 4 5 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':

1 pidstat -C ^s 15 1 1 2 3 4 5 6 7 8 9 10 11 12 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-страницы утилиты.