Мониторинг процессов в Linux - pidstat
Опубликовано пн, 01/05/2015 - 21:47 пользователем alitius
Ранее мы уже рассматривали одну из утилит входящих в sysstat - sar, сегодня мы расмотрим другую, не менее интересную утилиту - pidstat
pidstat расшифровывается как PID (Process ID) Statistic, то бишь статистика по запущенным процессам.
Этот инструмент может контролировать каждый процесс, который управляется ядром и генерировать отчеты. Он может контролировать либо конкретный PID (идентификатор процесса), либо все запущенные процессы в системе.
pidstat является частью Sysstat, который не установлен по-умолчанию. Установка sysstat расписана в статье Мониторинг производительности Linux на примере sar, так что повторяться я не буду.
Итак, pidstat это средство котрое собирает различные статистические данные, такие как использование процессом CPU, дискового пространства, статистика по потокам, связанных с выбранным задачам и дочерними процессами.
1. Показать статистику для всех запущенных процессов (или для конкретного процесса)
Используем опцию -p ALL для просмотра статистики по загруженным ресурсам для всех запущенных процессов.
По умолчанию будет показано использование процессора (CPU), но в дальнейших примерах мы посмотрим как просмотреть и другие критерии.
$ pidstat -p ALL | wc -l 274
$ pidstat -p ALL | head Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 18:45:52 UID PID %usr %system %guest %CPU CPU Command 18:45:52 0 1 0,00 0,00 0,00 0,00 2 init 18:45:52 0 2 0,00 0,00 0,00 0,00 1 kthreadd 18:45:52 0 3 0,00 0,00 0,00 0,00 0 ksoftirqd/0 18:45:52 0 5 0,00 0,00 0,00 0,00 0 kworker/0:0H 18:45:52 0 7 0,00 0,05 0,00 0,05 0 rcu_sched 18:45:52 0 8 0,00 0,02 0,00 0,02 0 rcuos/0 18:45:52 0 9 0,00 0,03 0,00 0,03 1 rcuos/1
Используйте опцию -p PID, где PID номер процесса, для просмотра конкретного процесса
$pidstat -p 4583 Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 18:48:58 UID PID %usr %system %guest %CPU CPU Command 18:48:58 0 4583 0,04 0,03 0,00 0,08 1 openvpn
Если Вы ранее не сталкивались с утилитами из пакета sysstat, то советую Вам вернуться к теме про sar, где идет более полное рассмотрение вывода команд из этого пакета.
2. Вывод информации по имени процесса
Для вывода информации по конкретному процессу по его имени используется ключ -С
В текущем примере мы выведем информацию для всех процессов в которые входит некоторое ключевое слово (например: evolution)
$ pidstat -C "evolution" Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 18:56:18 UID PID %usr %system %guest %CPU CPU Command 18:56:18 1000 2685 0,04 0,00 0,00 0,05 3 evolution 18:56:18 1000 2792 0,00 0,00 0,00 0,00 0 evolution-sourc 18:56:18 1000 2884 0,00 0,00 0,00 0,00 0 evolution-alarm 18:56:18 1000 2893 0,00 0,00 0,00 0,00 0 evolution-calen 18:56:18 1000 2958 0,00 0,00 0,00 0,00 0 evolution-addre
Примечание: В приведенном выше примере, параметр -С означает "Имя команды", то бишь будут искать процессы в котром присутствует заданное ключевое слово.
3. Повтор вывода через определенный интервал
По умолчанию вывод не повторяется.
$pidstat -p 2685 Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 19:05:50 UID PID %usr %system %guest %CPU CPU Command 19:05:50 1000 2685 0,04 0,00 0,00 0,05 3 evolution
Для повторения вывода мы ставим определнный временный интервал в секундах в качестве последнего параметра. Например, в текущем примере мы повторим вывод через какждую секунду (пока не нажмете Ctrl-C)
$pidstat -p 2685 1 Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 19:08:16 UID PID %usr %system %guest %CPU CPU Command 19:08:17 1000 2685 0,00 0,00 0,00 0,00 0 evolution 19:08:18 1000 2685 0,00 0,00 0,00 0,00 0 evolution 19:08:19 1000 2685 0,00 0,00 0,00 0,00 0 evolution 19:08:20 1000 2685 0,00 0,00 0,00 0,00 0 evolution 19:08:21 1000 2685 0,00 0,00 0,00 0,00 0 evolution 19:08:22 1000 2685 0,00 0,00 0,00 0,00 0 evolution 19:08:23 1000 2685 0,00 0,00 0,00 0,00 0 evolution 19:08:24 1000 2685 0,00 0,00 0,00 0,00 0 evolution ^C Среднее: 1000 2685 0,00 0,00 0,00 0,00 - evolution
Если нам необходим вывод через 5 секунд, используем -
# pidstat -p 2685 5
4. Вывод I/O статистики по процессу.
Используем ключ -d для отчета по вводу-ввыоду для процесса. Он покажет нам различные аттрибуты, такиек как PID, скорость чтения и записи на диска в кБ/c.
Текущий пример на покажет использования диска для процесса 2685 через какждую секунду
$pidstat -p 2685 -d 1 Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 19:14:28 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 19:14:29 1000 2685 0,00 0,00 0,00 0 evolution 19:14:30 1000 2685 0,00 0,00 0,00 0 evolution 19:14:31 1000 2685 0,00 0,00 0,00 0 evolution 19:14:32 1000 2685 0,00 0,00 0,00 0 evolution 19:14:33 1000 2685 0,00 0,00 0,00 0 evolution 19:14:34 1000 2685 0,00 0,00 0,00 0 evolution 19:14:35 1000 2685 0,00 0,00 0,00 0 evolution 19:14:36 1000 2685 0,00 0,00 0,00 0 evolution 19:14:37 1000 2685 72,00 0,00 0,00 0 evolution 19:14:38 1000 2685 1272,00 8,00 0,00 16 evolution 19:14:39 1000 2685 20,00 8,00 0,00 0 evolution 19:14:40 1000 2685 0,00 0,00 0,00 0 evolution 19:14:41 1000 2685 0,00 0,00 0,00 0 evolution 19:14:42 1000 2685 0,00 0,00 0,00 0 evolution ^C Среднее: 1000 2685 97,43 1,14 0,00 1 evolution
5. Вывод страничной активности
Используем опцию -r для вывода сбойных страниц и утилизации памяти для конкретного процесса (PID)
pidstat -p 2685 -r 1 Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 19:18:24 UID PID minflt/s majflt/s VSZ RSS %MEM Command 19:18:25 1000 2685 0,00 0,00 4495660 183760 3,04 evolution 19:18:26 1000 2685 0,00 0,00 4495660 183760 3,04 evolution 19:18:27 1000 2685 0,00 0,00 4495660 183760 3,04 evolution 19:18:28 1000 2685 0,00 0,00 4495660 183760 3,04 evolution 19:18:29 1000 2685 0,00 0,00 4495660 183760 3,04 evolution 19:18:30 1000 2685 0,00 0,00 4495660 183760 3,04 evolution 19:18:31 1000 2685 0,00 0,00 4495660 183760 3,04 evolution 19:18:32 1000 2685 0,00 0,00 4495660 183760 3,04 evolution ^C Среднее: 1000 2685 0,00 0,00 4495660 183760 3,04 evolution
6. Вывод имени команды и ее аргументов.
По умолчанию pidstst показывает только имя команды, т.е. без полного пути к команде и ее аргументов. Например, в столбце command вы можете видеть только "python" (которое является именем программы)
$ pidstat -C python Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 19:20:40 UID PID %usr %system %guest %CPU CPU Command 19:20:40 1000 2660 0,00 0,00 0,00 0,00 2 python 19:20:40 1000 2670 0,00 0,00 0,00 0,00 3 python 19:20:40 1000 2671 0,00 0,00 0,00 0,00 1 python
Однако когда Вы используется опцию -l, вы можете просмотреть полный путь команды, а также ее аргументы
$ pidstat -C python -l Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 21:55:37 UID PID %usr %system %guest %CPU CPU Command 21:55:37 1000 2660 0,00 0,00 0,00 0,00 3 python /usr/bin/hp-systray -x 21:55:37 1000 2670 0,00 0,00 0,00 0,00 1 python /usr/bin/hp-systray -x 21:55:37 1000 2671 0,00 0,00 0,00 0,00 1 python /usr/bin/hp-systray -x
В случае необходимости вывода через определенный промежуток времени, не забываем указывать последней опцией время в секундах.
7. Вывод результата через определенные интервалы заданное количество раз
Также возможно задавать количество выводов команды pidstat (чтобы не прерывать по Ctrl-C как в предыдущих примерах)
Для этого добавляем еще одно число после интервала в секундах, например сделаем вывод 5 раз через каждые 2 секунды, в конце мы также получим среднее значение по каждой колонке
$ pidstat -p 2685 2 5 Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 20:12:28 UID PID %usr %system %guest %CPU CPU Command 20:12:30 1000 2685 0,00 0,00 0,00 0,00 0 evolution 20:12:32 1000 2685 0,00 0,00 0,00 0,00 0 evolution 20:12:34 1000 2685 0,00 0,00 0,00 0,00 0 evolution 20:12:36 1000 2685 0,00 0,00 0,00 0,00 0 evolution 20:12:38 1000 2685 0,00 0,00 0,00 0,00 0 evolution Среднее: 1000 2685 0,00 0,00 0,00 0,00 - evolution
8. Вывод статистики по конкретному процессу и его дочерним процессам
Используйте опцию -T с ключевым словом CHILD или TASKS для показа дочерних или самих задач, вы также можете использовать ALL.
То бишь возможные варианты для ключа -T: CHILD или TASKS, или ALL
pidstat -T CHILD | head Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 20:19:02 UID PID usr-ms system-ms guest-ms Command 20:19:02 0 1 28040 6250 0 init 20:19:02 0 3 0 440 0 ksoftirqd/0 20:19:02 0 7 0 22260 0 rcu_sched 20:19:02 0 8 0 10030 0 rcuos/0 20:19:02 0 9 0 13320 0 rcuos/1 20:19:02 0 10 0 6800 0 rcuos/2 20:19:02 0 11 0 7110 0 rcuos/3
9. Показать информацию по зависимым процессам в формате дерева
Используя опцию -t, вы можете просмотреть вывод в формате дерева
$ pidstat -C "evolution" -t Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) 20:22:17 UID TGID TID %usr %system %guest %CPU CPU Command 20:22:17 1000 2685 - 0,05 0,01 0,00 0,05 2 evolution 20:22:17 1000 - 2685 0,04 0,00 0,00 0,04 2 |__evolution 20:22:17 1000 - 2790 0,00 0,00 0,00 0,00 1 |__evolution 20:22:17 1000 2792 - 0,00 0,00 0,00 0,00 0 evolution-sourc 20:22:17 1000 - 2792 0,00 0,00 0,00 0,00 0 |__evolution-sourc 20:22:17 1000 2884 - 0,00 0,00 0,00 0,00 2 evolution-alarm 20:22:17 1000 - 2884 0,00 0,00 0,00 0,00 2 |__evolution-alarm 20:22:17 1000 - 2887 0,00 0,00 0,00 0,00 0 |__evolution-alarm 20:22:17 1000 2893 - 0,00 0,00 0,00 0,00 3 evolution-calen 20:22:17 1000 - 2893 0,00 0,00 0,00 0,00 3 |__evolution-calen 20:22:17 1000 2958 - 0,00 0,00 0,00 0,00 1 evolution-addre 20:22:17 1000 - 2958 0,00 0,00 0,00 0,00 1 |__evolution-addre
10. Показать всю статистику по процессу в одну строку
Если запросить pidstat больше чем по одному параметру, он покажет одну информацию за другой.
То бишь если мы зададим -
$ pidstat -rud
То будет последовательно показана информация по ключу "-r", потом по "-u", а уже следом по "-d"
Однако если вы хотите увидеть всю информацию в одну строку по определенному процессу, используйте опцию -h
$ pidstat -rud -h | head Linux 3.16.0-28-generic (alitiusman) 05.01.2015 _x86_64_ (4 CPU) # Time UID PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 1420478963 0 1 0,00 0,00 0,00 0,00 2 1,37 0,00 29464 3732 0,06 -1,00 -1,00 -1,00 164 init 1420478963 0 3 0,00 0,00 0,00 0,00 0 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 0 ksoftirqd/0 1420478963 0 7 0,00 0,06 0,00 0,06 1 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 0 rcu_sched 1420478963 0 8 0,00 0,03 0,00 0,03 3 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 0 rcuos/0 1420478963 0 9 0,00 0,03 0,00 0,03 2 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 0 rcuos/1 1420478963 0 10 0,00 0,02 0,00 0,02 3 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 0 rcuos/2 1420478963 0 11 0,00 0,02 0,00 0,02 1 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 0 rcuos/3Мы довольно подробно рассмотрели возможности утилиты pidstat, использовать ее или взять другой инструмент, решать Вам, но на мой взгляд при решении инцидентов и проблем, данный инструмент будет не лишним.
Интересное на сайте:
Голосов пока нет