Когда в системе творится что-то неладное, поиск причин начинается, как правило, с анализа поведения процессов, чтобы отыскать пожирателей системный ресурсов. Думаю, многие из вас пользуются замечательными утилитами 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-страницы утилиты.