GNU/Linux >> Linux の 問題 >  >> Linux

Linux プロセスのパフォーマンスの問題をデバッグするための 10 の pidstat の例

pidstat は PID 統計の略です。

このツールは、カーネルによって管理される個々のプロセスを監視し、レポートを生成できます。特定の PID (プロセス ID)、またはシステムで実行されているすべてのプロセスを監視できます。

pidstat は sysstat ユーティリティの一部です。

このツールは、プロセスによって使用される CPU、プロセスのディスク使用統計、選択したタスクおよび子プロセスに関連付けられたスレッドの統計など、さまざまな統計を報告します。

このコマンドを使用するには、sysstat パッケージをインストールする必要があります。

yum install sysstat

1.実行中のすべてのプロセス (または特定のプロセス) の統計を表示

以下に示すように、-p ALL オプションを使用して、実行中のすべてのプロセスのパフォーマンス統計を表示します。

デフォルトでは、CPU 使用率が表示されます。ただし、後の例で示すように、これを他のパフォーマンス統計に変更できます。

# 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

注:上記の例で、オプション -C は「コマンド名」を表します。つまり、指定されたキーワードでプロセスのコマンド名を検索します。

3.一定間隔で出力を繰り返す

デフォルトでは、出力は繰り返されません。たとえば、オプション -u はタスクの CPU 使用率の統計を表示するためのもので、これは pidstat コマンドによって提供されるデフォルトの統計です。これにより、出力が 1 回だけ表示されます。

# 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

出力を繰り返すには、最後のパラメーターとして間隔を秒単位で指定します。たとえば、次の例では、(Ctrl-C を押すまで) 1 秒ごとに出力が繰り返されます。

# 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 を使用して特定のプロセスの I/O 統計を表示する

オプション -d を使用して、プロセスの I/O 統計を報告します。出力には、以下に示すように、PID、ディスクの読み取り速度と書き込み速度 (kB/s) などのさまざまな属性が表示されます。

次の例では、PID 23493 のディスク使用量を 1 秒ごとに表示します。

# 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 プロセスの統計を 1 秒ごとに監視します。

また、トップ コマンド出力からいくつかのプロセス ID を取得し、ここでそれを見て、システム リソースの定期的な使用状況を理解することもできます。

7.出力を一定間隔で X 回表示

以下に示すように、プロセスのリストに対して、一定間隔で一定回数のレポートを取得することもできます。

最後のパラメーターとして回数を追加します (秒単位の間隔の後)。

たとえば、次の例では、出力が 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 を指定します。この場合、統計は 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 を使用してすべての統計を 1 行に水平方向に表示

複数の統計を報告するように pidstat を指定すると、次の統計の後に 1 つの統計が表示されます。次の例では、最初にオプション「r」、次にオプション「u」、最後にオプション「d」のパフォーマンス統計を表示します。

# pidstat -rud

ただし、個々のプロセスのすべての統計を 1 行で表示する場合は、以下に示すようにオプション -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

Linux
  1. Linuxでプロセスを強制終了するための10以上の例

  2. Linux でプログラムの実行をデバッグするための 7 つの Strace の例

  3. Linux での renice コマンドの例

  1. 7 Linux df コマンドの例

  2. 8 Linux TR コマンドの例

  3. Linux での rm コマンドの例

  1. Linux での kill コマンドの例

  2. Linux での ps コマンドの例

  3. Linux での pkill コマンドの例