プロセスごとの統計をレポートする、pidstat

「pidstat」はプロセスごとの統計をレポートするコマンド。
vmstat、iostatなどのstat系コマンドと同様に以下の書式で使用する。


```
pidstat [options] [ interval [ count ] ]
```

ここでの確認は以下のバージョン

```
$ pidstat -V
sysstat version 10.1.5
```


#CPUの統計を監視（デフォルト）

1秒間隔で20回、プロセスのCPUの統計を出力する。「-u」はデフォルトのため省略可能。
「-l」はコマンドをすべての引数つきで表示する。

```
$  pidstat 1 20 -u -l
Linux 4.1.12-61.1.28.el7uek.x86_64 (ol122a)     05/29/2018      _x86_64_        (2 CPU)

02:07:09 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
02:07:10 PM     0       559    0.00    0.99    0.00    0.99     0  kworker/0:1H
02:07:10 PM 54321      3818    0.00   14.85    0.00   14.85     1  ora_vktm_orcl
02:07:10 PM 54321      3848    0.99    0.00    0.00    0.99     0  ora_dbw0_orcl
02:07:10 PM 54321      3850    0.00    0.99    0.00    0.99     0  ora_lgwr_orcl
02:07:10 PM 54321      3854    0.99    0.00    0.00    0.99     0  ora_lg00_orcl
02:07:10 PM 54321      3876    0.99    0.00    0.00    0.99     1  ora_mmnl_orcl
02:07:10 PM 54321      4624    0.99    0.00    0.00    0.99     0  ora_w003_orcl
02:07:10 PM     0      4917    0.00    0.99    0.00    0.99     0  kworker/0:3
02:07:10 PM 54321      6463   32.67    0.99    0.00   33.66     1  oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
02:07:10 PM 54321      6538    0.99    1.98    0.00    2.97     1  pidstat 1 20 -u -l
```



#メモリ統計を監視

1秒間隔で20回、プロセスのメモリの統計を出力する。

```
$  pidstat -r 1 20 -l
Linux 4.1.12-61.1.28.el7uek.x86_64 (ol122a)     05/29/2018      _x86_64_        (2 CPU)

02:04:29 PM   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:04:30 PM 54321      3918      3.96      0.00 1163444 162080   9.09  ora_cjq0_orcl
02:04:30 PM 54321      6417    699.01      0.00  108432   2400   0.13  pidstat -r 1 20 -l

02:04:30 PM   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:04:31 PM 54321      3918      4.95      0.00 1163444 162080   9.09  ora_cjq0_orcl
02:04:31 PM 54321      6416     12.87      0.00 1162476 145860   8.18  oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
02:04:31 PM 54321      6417    634.65      0.00  108432   2452   0.14  pidstat -r 1 20 -l

02:04:31 PM   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:04:32 PM 54321      3838      6.93      0.00 1154108 119168   6.68  ora_dbrm_orcl
02:04:32 PM 54321      3918      3.96      0.00 1163444 162080   9.09  ora_cjq0_orcl
02:04:32 PM 54321      6416      1.98      0.00 1162476 145860   8.18  oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
02:04:32 PM 54321      6417    621.78      0.00  108432   2452   0.14  pidstat -r 1 20 -l
```


#I/Oの統計を監視

1秒間隔で20回、プロセスのIOの統計を出力する。

```
$ pidstat -d 1 20 -l
Linux 4.1.12-61.1.28.el7uek.x86_64 (ol122a)     05/29/2018      _x86_64_        (2 CPU)

01:55:21 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

01:55:22 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
01:55:23 PM 54321      3852      0.00     31.37      0.00  ora_ckpt_orcl

01:55:23 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

01:55:24 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

01:55:25 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
01:55:26 PM 54321      3852      0.00     32.00      0.00  ora_ckpt_orcl
01:55:26 PM 54321      3854      0.00      4.00      0.00  ora_lg00_orcl
01:55:26 PM 54321      5633   1336.00      8.00      0.00  oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

01:55:26 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
01:55:27 PM 54321      3848    128.00  11952.00      0.00  ora_dbw0_orcl
01:55:27 PM 54321      3854      0.00      8.00      0.00  ora_lg00_orcl
01:55:27 PM 54321      3858      4.00      4.00      0.00  ora_lg01_orcl
01:55:27 PM 54321      5633    392.00    128.00      0.00  oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

01:55:27 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
01:55:28 PM 54321      3848      0.00  10952.00      0.00  ora_dbw0_orcl
```


#コマンドを指定して監視

「-C」オプションで指定した文字列を含むプロセスの情報を表示する。

「ora_」を含むプロセスの情報を表示。

```
$  pidstat -C "ora_"  1 20 -l
Linux 4.1.12-61.1.28.el7uek.x86_64 (ol122a)     05/29/2018      _x86_64_        (2 CPU)

02:10:50 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
02:10:51 PM 54321      3822    0.00    0.97    0.00    0.97     1  ora_gen0_orcl
02:10:51 PM 54321      3848    2.91    0.00    0.00    2.91     1  ora_dbw0_orcl
02:10:51 PM 54321      3850    0.00    0.97    0.00    0.97     0  ora_lgwr_orcl

02:10:51 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command

02:10:52 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
02:10:53 PM 54321      3918    1.00    0.00    0.00    1.00     1  ora_cjq0_orcl

02:10:53 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
02:10:54 PM 54321      3848    7.00    3.00    0.00   10.00     0  ora_dbw0_orcl
```

正規表現で指定可能である。dbwまたはlgwrを含むプロセスの情報を表示する。

```
$ pidstat -C "dbw|lgwr"  1 20 -l -d
Linux 4.1.12-61.1.28.el7uek.x86_64 (ol122a)     05/29/2018      _x86_64_        (2 CPU)

02:17:32 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

02:17:33 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
02:17:34 PM 54321      3848      0.00   2186.14      0.00  ora_dbw0_orcl

02:17:34 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
02:17:35 PM 54321      3848      0.00   9472.00      0.00  ora_dbw0_orcl

02:17:35 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
02:17:36 PM 54321      3848      0.00   8760.00      0.00  ora_dbw0_orcl

02:17:36 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
02:17:37 PM 54321      3848      0.00   1704.00      0.00  ora_dbw0_orcl
02:17:37 PM 54321      3850      4.00    392.00      0.00  ora_lgwr_orcl
```



#ユーザを指定して監視

「-U」でOSユーザを指定することもできる。

oracleユーザのプロセスを監視する例。

```
$ pidstat -U oracle  1 20 -l
Linux 4.1.12-61.1.28.el7uek.x86_64 (ol122a)     05/29/2018      _x86_64_        (2 CPU)

02:12:16 PM     USER       PID    %usr %system  %guest    %CPU   CPU  Command
02:12:17 PM   oracle      3818    6.73    0.00    0.00    6.73     1  ora_vktm_orcl
02:12:17 PM   oracle      3848    2.88    7.69    0.00   10.58     0  ora_dbw0_orcl
02:12:17 PM   oracle      6961    0.96    0.96    0.00    1.92     0  oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
02:12:17 PM   oracle      7027    0.96    1.92    0.00    2.88     1  pidstat -U oracle 1 20 -l
```

#プロセスを指定して監視

「-P」でプロセスIDを指定して監視することもできる。
また、SELFを指定するとpidstat自身、ALLを指定するとすべてのプロセス。

```
-p { pid [,...] | SELF | ALL }
```

ora_dbw0_orclとora_lgwr_orclのPIDを指定して監視する例。

```
$ ps -ef | grep -e dbw -e lgwr | grep -v grep
oracle    3848     1  0 11:43 ?        00:00:20 ora_dbw0_orcl
oracle    3850     1  0 11:43 ?        00:00:06 ora_lgwr_orcl


$ pidstat -p 3850,3848  1 20 -l -d
Linux 4.1.12-61.1.28.el7uek.x86_64 (ol122a)     05/29/2018      _x86_64_        (2 CPU)

02:14:43 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
02:14:44 PM 54321      3850      0.00      0.00      0.00  ora_lgwr_orcl
02:14:44 PM 54321      3848      0.00   5227.72      0.00  ora_dbw0_orcl

02:14:44 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
02:14:45 PM 54321      3850      0.00      0.00      0.00  ora_lgwr_orcl
02:14:45 PM 54321      3848      0.00   5080.00      0.00  ora_dbw0_orcl

02:14:45 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
02:14:46 PM 54321      3850      0.00      4.00      0.00  ora_lgwr_orcl
02:14:46 PM 54321      3848      0.00   5928.00      0.00  ora_dbw0_orcl
```