ここから本文です

【 pidstat 】コマンド――プロセスのリソース使用量を表示する

7/24(月) 8:10配信

@IT

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、プロセスごとCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。

コマンド名がbashのプロセスについてI/Oデバイスの使用状況を表示したところ

●pidstatコマンドとは?

 「pidstat」はプロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示するコマンドです。

 pidstatはmpstatコマンドやiostatコマンドと同じsysstatパッケージに収録されています。いずれも、主に/var/log/sysstatを参照するコマンド群です。

 sysstatパッケージがインストールされていない場合、「sudo yum install sysstat」あるいは「sudo apt-get install sysstat」などでインストールできます ※。


※sysstatパッケージをインストールする前にパッケージの内容を確認するコマンドもある。「apt-cache -f search sysstat」と実行する。


□□
●pidstatコマンドの書式
pidstat [オプション] [更新の間隔 [回数]]
※[ ]は省略可能な引数を示しています
□□

●pidstatの主なオプション

○短いオプション/意味
-C コマンド名/指定したコマンド名のプロセスだけを表示する。正規表現が使用可能
-d/I/Oの統計情報を表示する(カーネル2.6.20以降)
-h/複数の内容を指定した場合も、全ての項目を1行で出力する(他のプログラムで処理しやすくするためのオプションで、時刻の表示もUNIX時刻になる)
-I/SMP(対称型マルチプロセッシング)環境において、CPUの使用率をプロセッサ数で割った値を表示する
-l/コマンド名を引数付きで表示する
-p プロセスID/表示するプロセスIDを指定する。「-p 1,2,3」のように「,」区切りで複数指定可能。「-p SELF」でpidstat自身を表示、「-p ALL」で全てのプロセスを表示
-r/ページフォールトとメモリの使用率を表示する
-s/スタック使用量を表示する
-t/マルチスレッドで動いているプロセスをまとめて表示。項目としてTGID(スレッドグループID)とTID(スレッドID)も同時に出力する
-T 指定/表示対象を「TASK」(選択したプロセス)、「CHILD」(指定したプロセスの子プロセス)、「ALL」(両方)から選択
-u/CPU使用率を表示する(デフォルト)
-w/コンテキストスイッチの発生率を表示する(カーネル2.6.23以降)

●「-u」オプション指定時の表示項目(デフォルト指定)

○項目名/内容
UID/ユーザーID
PID/プロセスID
%usr/アプリケーション(ユーザーレベル)によるCPU使用率
%system/カーネル(システムレベル)によるCPU使用率
%guest/仮想マシンによるCPU使用率
%CPU/プロセスが使用しているトータルのCPU使用率
CPU/プロセスを実行しているCPUの番号(「-I」が指定されている場合はCPUの数で割った値を表示する)
Command/コマンド名

●「-r」オプション指定時の表示項目

○項目名/内容
UID/ユーザーID
PID/プロセスID
minflt/s/1秒ごとのマイナーフォールト数 ※※
majflt/s/1秒ごとのメジャーフォールト数
VSZ/仮想メモリサイズ(KB単位)
RSS/物理メモリサイズ(スワップされていないメモリのサイズ、KB単位)
%MEM/使用メモリの割合
Command/コマンド名


※※ディスクからメモリページを読み出す必要がないページフォールト。メジャーフォールトでは、読み出す必要がある。


●「-s」オプション指定時の表示項目

○項目名/内容
UID/ユーザーID
PID/プロセスID
StkSize/予約済みだが使用されていないスタックの量
StkRef/参照されているスタックの量
Command/コマンド名

●「-d」オプション指定時の表示項目

○項目名/内容
UID/ユーザーID
PID/プロセスID
kB_rd/s/1秒当たりの読み出し量(KB単位)
kB_wr/s/1秒当たりの書き込み量(KB単位)
kB_ccwr/s/キャンセルされた1秒当たりの書き込み量(KB単位)
iodelay/(バージョン10.2.1以降で表示)
Command/コマンド名

●「-w」オプション指定時の表示項目

○項目名/内容
UID/ユーザーID
PID/プロセスID
cswch/s/1秒当たりの自発的なコンテキストスイッチの回数 ※※※
nvcswch/s/1秒当たりの強制的なコンテキストスイッチの回数
Command/コマンド名


※※※自発的なコンテキストスイッチは、必要なリソースが利用できないため、タスクがブロックされた際に発生する。強制的なコンテキストスイッチは、タイムスライス中にタスクが実行された後、割り当てられたCPUの使用権を手放した際に起こる。


●プロセスごとにCPU使用率を表示する

 「pidstat」で、現在動作しているプロセスそれぞれのCPU使用率を表示します(画面1)。「pidstat -p プロセスID」 ※※※※、あるいは「pidstat -C コマンド名」で表示対象のプロセスを選択できます。


※※※※筆者の環境(CentOS)に収録されているpidstat 10.1.5(パッケージ:sysstat 10.1.5)では、「-p」オプションを指定した際に、コマンド実行例にあるようなプロセスIDとSELFの指定が効かず、情報を表示しなかった。「-t」オプション指定時や、繰り返し表示する際には問題がない。なお、Ubuntu収録のpidstat 10.2.0以降ではいずれも問題なく表示する。


□□
●コマンド実行例
pidstat
(各プロセスのCPU使用率を表示)
pidstat -p 1,2,3
(プロセスIDが1と2と3のプロセスを表示)
pidstat -C bash
(コマンド名がbashのプロセスを表示)
□□

●プロセスごとにI/Oデバイスの使用状況を表示する

 「-d」オプションを指定すると、プロセスごとのI/Oデバイスの使用状況を表示します。

□□
●コマンド実行例
pidstat -d
□□

 CPU使用率とI/Oデバイスの使用状況の両方を表示したい場合は、「-u」と「-d」を同時に指定します。ただし、表示結果がプロセスごとにはまとまっていません。プロセスごとに1行にまとめたい場合は、「-h」も同時に使います。

 「-h」は他のプログラムで処理しやすいように用意されているオプションです。UNIX時間(1970年1月1日00:00:00からの経過秒数)を使って、時刻を表示します。

□□
●コマンド実行例
pidstat -u -d
pidstat -u -d -h
□□


●統計情報を一定間隔で更新する

 「pidstat 秒数」または「pidstat 秒数 回数」のように更新の間隔を指定すると、アクティブなプロセスの統計情報を指定分だけ表示します。回数を指定しなかった場合は[CTRL]+[C]で終了します。

 指定回数後、または[CTRL]+[C]で終了した場合は、最後に平均値(Average)を出力します。

□□
●コマンド実行例
pidstat 1
(1秒ごとに表示、[CTRL]+[C]で終了)
pidstat 1 5
(1秒ごとに5回表示)
□□

 繰り返しの間隔を指定した場合、「-C」オプションによる指定が効かないため、「-p」オプションで表示するプロセスIDを指定しています。

●筆者紹介
○西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。

最終更新:7/24(月) 8:10
@IT

Yahoo!ニュースからのお知らせ