Наши партнеры

UnixForum





Библиотека сайта 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