Библиотека сайта rus-linux.net
10 примеров использования в Linux команды pidstat для получения статистики по производительности процессов
Оригинал: 10 pidstat Examples to Debug Performance Issues of Linux ProcessАвтор: Balakrishnan Mariyappan
Дата публикации: 12 November 2014
Перевод: Н.Ромоданов
Дата перевода: декабрь 2014 г.
pidstat – это сокращение от PID Statistics (статистика по PID)
Этот инструмент может выполнять мониторинг состояния отдельного процесс, управление которым осуществляется ядром, и может формировать отчет. Он может выполнять мониторинг либо одного конкретного процесса по его идентификатору PID (идентификатор процесса), либо сразу все процессов, работающих в системе.
pidstat является частью утилиты sysstat
Это инструментальное средство выдает различные статистические данные по процессу, в том числе об использовании процессора, об использовании процессом дискового пространства, о потоках, связанных с выбранными задачами и дочерними процессами.
Пакет systat можно установить с помощью следующей команды
yum install sysstat
1. Выдача статистики для ВСЕХ работающих процессов (или конкретного процесса)
Используйте параметр -p ALL для того, чтобы просмотреть статистику всех запущенных процессов так, как это показано ниже.
По умолчанию здесь будет отображаться загрузка процессора. Но, вы можете изменить эту статистику и получать любые другие статистические данные о производительности так, как это показано в следующих примерах.
# pidstat -p ALL | wc -l 165 # pidstat -p ALL | head Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 05:00:03 PID %usr %system %guest %CPU CPU Command 05:00:03 1 0.00 0.00 0.00 0.00 0 init 05:00:03 2 0.00 0.00 0.00 0.00 0 kthreadd 05:00:03 3 0.00 0.00 0.00 0.00 0 ksoftirqd/0 05:00:03 6 0.00 0.00 0.00 0.00 0 migration/0 05:00:03 7 0.00 0.00 0.00 0.00 0 watchdog/0 05:00:03 8 0.00 0.00 0.00 0.00 0 cpuset 05:00:03 9 0.00 0.00 0.00 0.00 0 khelper
Используйте параметр -p PID для того, чтобы контролировать статистику производительности конкретного процесса так, как это показано ниже.
# pidstat -p 13203 Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 05:04:29 PID %usr %system %guest %CPU CPU Command 05:04:29 13203 0.00 0.00 0.00 0.00 0 vim
Если вы новичок в использовании пакета systat, то вам потребуется также понимать как с помощью команды sar выдаются статистические данные, относящиеся к производительности.
2. Отображение с помощью параметра -C и имени процесса статистики, касающиеся производительности
В следующем примере показана статистика производительности для всех процессов, в которых есть определенное ключевое слово (например, mysql).
# pidstat -C "mysql" Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 06:33:14 PID %usr %system %guest %CPU CPU Command 06:33:14 23132 0.00 0.00 0.00 0.00 0 mysqld_safe 06:33:14 23493 0.06 0.02 0.00 0.08 0 mysqld
Примечание: В приведенном выше примере, параметр -С означает "Command Name" (имя команды), то есть будет выполнен поиск имени команды процесса, в которых присутствует заданное ключевое слово.
3. Повторение выдачи результата через определенный интервал времени
По умолчанию, выдача данных повторяться не будет. Например, параметр -u используется для отображения статистики использования процессора задачами, и эта статистика по умолчанию выдается командой pidstat. Выдача такого результата будет осуществляться только один раз.
# pidstat -p 23493 Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 06:52:35 PID %usr %system %guest %CPU CPU Command 06:52:36 23493 1.00 0.00 0.00 1.00 0 mysqld
Чтобы повторять вывод данных, укажите в качестве последнего параметра конкретный интервал в секундах,. Например, в следующем примере вывод будет повторяться 1 раз в секунду (пока вы не нажмете Ctrl-C).
# pidstat -p 23493 1 Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 06:52:35 PID %usr %system %guest %CPU CPU Command 06:52:36 23493 1.00 0.00 0.00 1.00 0 mysqld 06:52:37 23493 0.00 0.00 0.00 0.00 0 mysqld 06:52:38 23493 0.00 0.00 0.00 0.00 0 mysqld 06:52:39 23493 0.00 0.00 0.00 0.00 0 mysqld 06:52:40 23493 0.00 0.00 0.00 0.00 0 mysqld 06:52:41 23493 0.00 0.00 0.00 0.00 0 mysqld ..
Команда, приводимая ниже, будет повторять выдачу статистических данных каждые 5 секунд (пока вы не нажмете Ctrl-C).
# pidstat -p 23493 5
4. Выдача с помощью параметра -d статистики пол операциям ввода/вывода для конкретного процесса
Используйте параметр -d для выдачи статистики ввода/вывода для некоторого процесса. В выдаваемых данных будут отображаться различные атрибуты, например, PID, скорость чтения и записи на диске, указываемые в килобайтах в сек., так, как это показано ниже.
В следующем примере каждую секунду выдается статистика об использовании дискового пространства для PID 23493.
# pidstat -p 23493 -d 1 Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 06:48:33 PID kB_rd/s kB_wr/s kB_ccwr/s Command 06:48:34 23493 0.00 0.00 0.00 mysqld 06:48:35 23493 0.00 0.00 0.00 mysqld 06:48:36 23493 0.00 0.00 0.00 mysqld 06:48:37 23493 0.00 0.00 0.00 mysqld 06:48:38 23493 0.00 0.00 0.00 mysqld 06:48:39 23493 0.00 0.00 0.00 mysqld 06:48:40 23493 0.00 0.00 0.00 mysqld 06:48:41 23493 0.00 0.00 0.00 mysqld
5. Отображение при помощи параметра -r активности страничной памяти для конкретного процесса
Используйте параметр -r для отображения страничной памяти для данной задачи (PID).
# pidstat -p 23493 -r 1 Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 06:58:48 PID minflt/s majflt/s VSZ RSS %MEM Command 06:58:49 23493 0.00 0.00 398876 33468 3.28 mysqld 06:58:50 23493 0.00 0.00 398876 33468 3.28 mysqld 06:58:51 23493 0.00 0.00 398876 33468 3.28 mysqld 06:58:52 23493 0.00 0.00 398876 33468 3.28 mysqld 06:58:53 23493 0.00 0.00 398876 33468 3.28 mysqld 06:58:54 23493 0.00 0.00 398876 33468 3.28 mysqld 06:58:55 23493 0.00 0.00 398876 33468 3.28 mysqld
6. Отображение при помощи параметра -l имени команды и ее аргументов
По умолчанию, pidstat отображает только имя команды. т.е. без полного пути команды и ее аргументов. Например, в столбце команды, вы увидите только слово "java" (которое является лишь именем программы).
$ pidstat -C java Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 11:00:25 PID %usr %system %guest %CPU CPU Command 11:00:25 3288 0.04 0.03 0.00 0.07 0 java 11:00:25 17861 0.03 0.02 0.00 0.05 6 java
Однако, когда вы используете параметр -l, то будет отображен полный путь к команде и все ее аргументы, например, так, как это показано ниже.
$ pidstat -C java -l Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 11:00:31 PID %usr %system %guest %CPU CPU Command 11:00:31 3288 0.04 0.03 0.00 0.07 0 /usr/bin/java -Djava.util.logging.config.file=/home/tomcat/apache-tomcat-7.0.56/conf/logging.properties 11:00:31 17861 0.03 0.02 0.00 0.05 6 java -jar /home/rabbit/myapp.jar /home/app/conf/myapp.conf
Для того, чтобы получать для задач статистику через определенные интервалы времени, просто укажите то количество секунд, через которое вы хотите получать такую статистику,
# pidstat -p 23493 1 Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 06:25:50 PID %usr %system %guest %CPU CPU Command 06:25:51 23493 0.00 0.00 0.00 0.00 0 mysqld 06:25:52 23493 0.00 0.00 0.00 0.00 0 mysqld
Как видно из приведенного выше примера, статистика процесса mysqld будет выдаваться каждую секунду.
Вы также можете с помощью команды top получить идентификаторы нескольких процессов, а затем через регулярные интервалы просмотреть их здесь с тем, чтобы понять, как они используют системные ресурсы.
7. Выдача нескольких результатов через регулярные промежутки времени
Также можно для списка процессов через заданные интервалы времени выдавать статистические результаты более одного раза так, как это показано ниже.
Добавьте в качестве последнего параметра (после интервалов в секундах) значение, указывающее сколько раз нужно выдать статистический результат.
Например, в следующем примере результат будет выдаваться 5 раз (с периодичностью в 2 секунды). В конце выдаваемого результата будут также отображены "средние" значения.
# pidstat 2 5 Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 07:14:11 PID %usr %system %guest %CPU CPU Command 07:14:13 1445 0.00 0.50 0.00 0.50 0 pidstat 07:14:13 28222 0.50 0.00 0.00 0.50 0 cma 07:14:13 PID %usr %system %guest %CPU CPU Command 07:14:15 1445 0.00 0.50 0.00 0.50 0 pidstat 07:14:15 28222 0.00 0.50 0.00 0.50 0 cma 07:14:15 PID %usr %system %guest %CPU CPU Command 07:14:17 1445 0.50 0.00 0.00 0.50 0 pidstat 07:14:17 19614 0.00 0.50 0.00 0.50 0 nailswebd 07:14:17 PID %usr %system %guest %CPU CPU Command 07:14:19 1445 0.50 0.50 0.00 1.00 0 pidstat 07:14:19 PID %usr %system %guest %CPU CPU Command 07:14:21 1445 0.00 0.51 0.00 0.51 0 pidstat 07:14:21 28222 0.00 0.51 0.00 0.51 0 cma Average: PID %usr %system %guest %CPU CPU Command Average: 1445 0.20 0.40 0.00 0.60 - pidstat Average: 19614 0.00 0.10 0.00 0.10 - nailswebd Average: 28222 0.10 0.20 0.00 0.30 - cma
8. Отображение с помощью параметра -T статистических данных для выбранных процессов и их дочерних процессов
Используйте параметр -T и укажите либо значение CHILD, либо значение TASKS. В таких случаях будет выдана статистика либо о задачах, либо о задачах и их дочерних процессах. Вы также можете указать параметр ALL.
Возможные значения параметра -T: CHILD, TASKS или ALL.
# pidstat -T CHILD | head Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 10:13:34 IST PID usr-ms system-ms guest-ms Command 10:13:34 IST 1 7950 3340 0 init 10:13:34 IST 3 0 420 0 ksoftirqd/0 10:13:34 IST 8 0 10 0 migration/0 10:13:34 IST 10 0 1190 0 rcu_sched 10:13:34 IST 11 10 0 0 watchdog/0 10:13:34 IST 12 10 0 0 watchdog/1 10:13:34 IST 13 0 450 0 ksoftirqd/1
9. Отображение с помощью параметра -t статистики в виде дерева зависимых процессов
С помощью параметра -t вы можете отобразить результат в виде дерева так, как это показано ниже.
# pidstat -t -C "mysql" Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ 18:47:54 PID TID %usr %system %guest %CPU CPU Command 18:47:54 1646 - 0.00 0.00 0.00 0.00 0 mysql 18:47:54 - 1646 0.00 0.00 0.00 0.00 0 |__mysql 18:47:54 23132 - 0.00 0.00 0.00 0.00 0 mysqld_safe 18:47:54 - 23132 0.00 0.00 0.00 0.00 0 |__mysqld_safe 18:47:54 23493 - 0.06 0.02 0.00 0.08 0 mysqld 18:47:54 - 23493 0.00 0.00 0.00 0.00 0 |__mysqld 18:47:54 - 23504 0.00 0.00 0.00 0.00 0 |__mysqld 18:47:54 - 23509 0.00 0.00 0.00 0.00 0 |__mysqld 18:47:54 - 23510 0.00 0.00 0.00 0.00 0 |__mysqld 18:47:54 - 23512 0.00 0.00 0.00 0.00 0 |__mysqld 18:47:54 - 23515 0.00 0.00 0.00 0.00 0 |__mysqld 18:47:54 - 23516 0.01 0.00 0.00 0.02 0 |__mysqld 18:47:54 - 23517 0.00 0.00 0.00 0.00 0 |__mysqld 18:47:54 - 23518 0.01 0.01 0.00 0.02 0 |__mysqld 18:47:54 - 23519 0.00 0.00 0.00 0.00 0 |__mysqld ..
10. Отображение с помощью параметра -h статистики горизонтально одной строкой
Если вы попросите pidstat выдать более чем один набор статистических данных, то каждый набор данных будет отображаться один за другим. В следующем примере сначала будет отображаться статистика производительности для параметра "r", затем — для параметра "u", и, наконец, - для параметра "d".
# pidstat -rud
Однако, если вы хотите, чтобы для каждого процесса все эти статистические данные выдавались в одной строке, то используйте параметр -h так, как это показано ниже.
# pidstat -rud -h | head Linux 3.0.101-0.7.17-default (thegeekstuff) 07/30/14 _x86_64_ # Time PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command 1406823329 1 0.04 0.19 0.00 0.24 2 21.50 0.03 26944 2768 0.07 -1.00 -1.00 -1.00 init 1406823329 3 0.00 0.03 0.00 0.03 0 0.00 0.00 0 0 0.00 -1.00 -1.00 -1.00 ksoftirqd/0 1406823329 8 0.00 0.00 0.00 0.00 0 0.00 0.00 0 0 0.00 -1.00 -1.00 -1.00 migration/0 1406823329 10 0.00 0.08 0.00 0.08 2 0.00 0.00 0 0 0.00 -1.00 -1.00 -1.00 rcu_sched 1406823329 13 0.00 0.03 0.00 0.03 1 0.00 0.00 0 0 0.00 -1.00 -1.00 -1.00 ksoftirqd/1 1406823329 14 0.00 0.00 0.00 0.00 1 0.00 0.00 0 0 0.00 -1.00 -1.00 -1.00 migration/1 1406823329 18 0.00 0.01 0.00 0.01 2 0.00 0.00 0 0 0.00 -1.00 -1.00 -1.00 ksoftirqd/2