31.2. CPU やメモリ使用量の確認(top)

プロセスが消費する CPU やメモリなどのハードウェアリソースの情報収集、およびプロセスの操作を行うコマンドに top があります。top には対話型のインターフェースも用意されています。

top [option]

表 31-2. top コマンドの主な option

-d delayスクリーンを更新する間隔を秒単位で指定します。起動後の対話型インターフェースで s を入力し変更することができます。
-p PID表示するプロセス ID の指定です。
-sセキュアモードで起動します。プロセスへのシグナル送信などの操作を対話型インターフェースで禁止します。
-iアイドル中のプロセスやゾンビプロセスを表示しません。起動後の対話型インターフェースで i を入力してこのモードを切り換えることができます。
-n iter指定した回数更新し、top コマンドを終了します。

以下のように実行します。初期状態では、先頭 5 行にシステム全体の情報が表示されます。この部分をサマリーエリアといいます。次の行は、メッセージや対話的にコマンドを入力する際のプロンプトが表示されるエリアです。その下に各フィールドのヘッダがあり、プロセスごとの情報がリストされます。対話型インターフェースで使用可能なコマンドは 項31.2.1 を参照してください。

# top
top - 12:22:56 up 7 days, 16 min, 15 users,  load average: 0.00, 0.02, 0.00
Tasks: 114 total,   3 running, 108 sleeping,   3 stopped,   0 zombie
Cpu(s):  0.3% us,  0.3% sy,  0.0% ni, 99.0% id,  0.3% wa,  0.0% hi,  0.0% si
Mem:    256628k total,   249408k used,     7220k free,    31068k buffers
Swap:   521600k total,    16292k used,   505308k free,    47524k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29339 root      17   0  3388  948 1680 R  0.3  0.4   0:00.10 top
    1 root      16   0  2516  516 1244 S  0.0  0.2   0:00.62 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/0
    3 root       5 -10     0    0    0 S  0.0  0.0   0:00.24 events/0
    4 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 khelper
    5 root       5 -10     0    0    0 S  0.0  0.0   0:04.04 kblockd/0
   29 root      15   0     0    0    0 S  0.0  0.0   0:00.00 kapmd
   31 root      15   0     0    0    0 S  0.0  0.0   0:00.59 pdflush
   32 root      15   0     0    0    0 S  0.0  0.0   0:00.98 pdflush
   34 root       7 -10     0    0    0 S  0.0  0.0   0:00.00 aio/0
   33 root      15   0     0    0    0 S  0.0  0.0   0:06.23 kswapd0
  192 root      16   0     0    0    0 S  0.0  0.0   0:00.00 kseriod
  202 root      15   0     0    0    0 S  0.0  0.0   0:01.48 kjournald
  274 root      15   0     0    0    0 S  0.0  0.0   0:00.00 khubd
  339 root      15   0     0    0    0 S  0.0  0.0   0:00.02 kjournald
  670 root      16   0  2360  544 1208 S  0.0  0.2   0:00.24 syslogd

表示される各フィールドの概要は以下の通りです。

表 31-3. サマリーエリア

top起動時間、ロードアベレージ
Tasks:各状態のタスク数
Cpu(s)CPU の使用状況
Mem物理メモリの使用状況
Swapスワップ領域の使用状況

表 31-4. 主なフィールド

PIDプロセス ID
USERユーザー名
PRプライオリティ
NIナイス値
VIRTプロセスの使用する仮想メモリ容量
RESスワップしていない物理メモリの使用量
SHR共有メモリの使用量
%CPUCPU 使用量(占有率)
%MEM物理メモリの使用量(占有率)
TIME+起動以降に使用した CPU 時間の合計
COMMANDコマンドライン文字列またはプログラム名

ティップ

これらは、/proc/ ファイルシステムから得られる情報と同じです。/proc ファイルシステムについて詳細は、第30章を参照してください。

31.2.1. 対話型インターフェースのコマンド

起動後には、以下のようなコマンドを入力することができます。

表 31-5. 対話型インターフェースの主なコマンド

[Space]キー即座に更新します。
h | ?ヘルプ画面を表示します。
kプロセスを kill します。プロンプト PID to kill: が表示されたら対象のプロセスの PID を入力します。デフォルトのシグナルは 15 の SIGTERM です。変更する場合は、Kill PID PID with signal [15]: に続けてシグナルを入力します。
iアイドルプロセスとゾンビプロセスの表示/非表示を切り換えます。
n | #表示するプロセスの数を変更します。プロンプト Maximum tasks = 0, change to (0 is unlimited): が表示されたら表示する数を入力します。0 は無制限です。
qtop コマンドを終了します。
rプロセスのプライオリティを変更します。プロンプト PID to renice: が表示されたら対象プロセスのプロセス ID を入力します。Renice PID PID to value: に続けて renice 値を入力します。現在の nice 値は、リストの NI に表示されています。
s表示を更新する間隔を変更します。プロンプト Change delay from 3.0 to: が表示されたら間隔を秒単位で入力します。
f表示するフィールドの追加/削除を行います。
F | O現在のソートフィールドを変更します。
oフィールドの表示順序を変更します。
ltop 項目(負荷平均、uptime 情報)の表示/非表示を切り換えます。
mMem:(メモリ情報)の表示/非表示を切り換えます。
tCpu(s):(プロセスと CPU 状態の情報)の表示/非表示を切り換えます。
cCOMMAND フィールドのコマンド名全体の表示/非表示を切り換えます。
NPID 順にソートします。
PCPU の使用量順にソートします。
Mメモリの使用量順にソートします。
W現在の設定を ~/.toprc ファイルに書き込みます。この設定ファイルを読み込んで次回起動時には設定が有効になります。
b太字と反転表示を切り換えます。
xカラムの強調表示有無を切り換えます。
y行の強調表示有無を切り換えます。
<ソート対象フィールドを左のフィールドに変更します。
>ソート対象フィールドを右のフィールドに変更します。
Rソートの昇順/降順を切り換えます。
u表示ユーザーを選択します。プロンプト Which user (blank for all): が表示されたら ユーザー ID またはユーザー名を入力します。選択ユーザーのプロセスのみが表示されます。ブランクのまま [Enter] キーを押すと全ユーザーのプロセンスが表示されます。
Aフルスクリーンと複数スクリーンとを切り換えます。複数スクリーンを表示しているときには、a(次のスクリーン)または w(前のスクリーン)でカレントスクリーンを変更できます。G ではスクリーン番号を指定して変更します。

対話型インターフェースで表示フィールドを変更する

top コマンド起動後に表示するフィールドを変更するには以下のように操作します。

f コマンドを入力すると以下の画面が表示されます。現在表示されているフィールドの 1 桁目には * が表示されています。2 桁目の文字(PID の場合は、A)を入力することで表示/非表示が切り替わります。以下の状態で UID を表示したい場合は、d を入力します。UID の行の 1 桁目に * が表示され、[Enter]キーで戻ると画面に UID が追加されます。

Current Fields:  AEHIOQTWKMNbcdfgjplrsuvyzX  for window 1:Def
Toggle fields via field letter, type any other key to return

* A: PID        = Process Id              u: nFLT       = Page Fault count
* E: USER       = User Name               v: nDRT       = Dirty Pages count
* H: PR         = Priority                y: WCHAN      = Sleeping in Function
* I: NI         = Nice value              z: Flags      = Task Flags <sched.h>
* O: VIRT       = Virtual Image (kb)    * X: COMMAND    = Command name/line
* Q: RES        = Resident size (kb)
* T: SHR        = Shared Mem size (kb)  Flags field:
* W: S          = Process Status          0x00000001  PF_ALIGNWARN
* K: %CPU       = CPU usage               0x00000002  PF_STARTING
* M: TIME+      = CPU Time, hundredths    0x00000004  PF_EXITING
* N: %MEM       = Memory usage (RES)      0x00000040  PF_FORKNOEXEC
  b: PPID       = Parent Process Pid      0x00000100  PF_SUPERPRIV
  c: RUSER      = Real user name          0x00000200  PF_DUMPCORE
  d: UID        = User Id                 0x00000400  PF_SIGNALED
  f: GROUP      = Group Name              0x00000800  PF_MEMALLOC
  g: TTY        = Controlling Tty         0x00002000  PF_FREE_PAGES (2.5)
  j: #C         = Last used cpu (SMP)     0x00008000  debug flag (2.5)
  p: SWAP       = Swapped size (kb)       0x00024000  special threads (2.5)
  l: TIME       = CPU Time                0x001D0000  special states (2.5)
  r: CODE       = Code size (kb)          0x00100000  PF_USEDFPU (thru 2.4)
  s: DATA       = Data+Stack size (kb)

対話型インターフェースでソートフィールドを変更する

top コマンド起動後にソート対象のフィールドを変更するには以下のように行います。

F または、O コマンドを入力すると以下の画面が表示されます。現在ソートされているフィールドの 1 桁目には * が表示されています。2 桁目の文字(PID の場合は a)を入力することでソート対象が切り替わります。以下の状態で メモリの使用量でソートしたい場合は、n を入力します。%MEM の行の 1 桁目に * が表示され、[Enter]キーで戻るとメモリ使用量でソートされます。

Current Sort Field:  Q  for window 1:Def
Select sort field via field letter, type any other key to return

  a: PID        = Process Id              v: nDRT       = Dirty Pages count
  b: PPID       = Parent Process Pid      w: S          = Process Status
  c: RUSER      = Real user name          x: COMMAND    = Command name/line
  d: UID        = User Id                 y: WCHAN      = Sleeping in Function
  e: USER       = User Name               z: Flags      = Task Flags <sched.h>
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty       Note1:
  h: PR         = Priority                If a selected sort field can't be
  i: NI         = Nice value              shown due to screen width or your
  j: #C         = Last used cpu (SMP)     field order, the '<' and '>' keys
  k: %CPU       = CPU usage               will be unavailable until a field
  l: TIME       = CPU Time                within viewable range is chosen.
  m: TIME+      = CPU Time, hundredths
  n: %MEM       = Memory usage (RES)    Note2:
  o: VIRT       = Virtual Image (kb)      Field sorting uses internal values,
  p: SWAP       = Swapped size (kb)       not those in column display.  Thus,
* Q: RES        = Resident size (kb)      the TTY & WCHAN fields will violate
  r: CODE       = Code size (kb)          strict ASCII collating sequence.
  s: DATA       = Data+Stack size (kb)    (shame on you if WCHAN is chosen)
  t: SHR        = Shared Mem size (kb)
  u: nFLT       = Page Fault count

対話型インターフェースでフィールドの表示順序を変更する

top コマンド起動後にフィールドの表示順序を変更するには以下のように操作します。

o コマンドを入力すると次の画面が表示されます。現在表示されているフィールドの 1 桁目には * が表示されており上にあるものから順番に表示されています。2 桁目の文字(USER の場合は E)の大文字を入力すると表示順序が上がり、小文字を入力すると表示順序が下がります。この状態で ユーザー名を一番左に表示したい場合は、E を入力します。USER の行と PID の行が入れ替わり、USER の行が 1 行目になります。[Enter]キーで戻ると PID と USER の表示順序が変更されます。

Current Fields:  AEHIOQTWKNMbcdfgjplrsuvyzX  for window 1:Def
Upper case letter moves field left, lower case right

* A: PID        = Process Id              u: nFLT       = Page Fault count
* E: USER       = User Name               v: nDRT       = Dirty Pages count
* H: PR         = Priority                y: WCHAN      = Sleeping in Function
* I: NI         = Nice value              z: Flags      = Task Flags <sched.h>
* O: VIRT       = Virtual Image (kb)    * X: COMMAND    = Command name/line
* Q: RES        = Resident size (kb)
* T: SHR        = Shared Mem size (kb)  Flags field:
* W: S          = Process Status          0x00000001  PF_ALIGNWARN
* K: %CPU       = CPU usage               0x00000002  PF_STARTING
* N: %MEM       = Memory usage (RES)      0x00000004  PF_EXITING
* M: TIME+      = CPU Time, hundredths    0x00000040  PF_FORKNOEXEC
  b: PPID       = Parent Process Pid      0x00000100  PF_SUPERPRIV
  c: RUSER      = Real user name          0x00000200  PF_DUMPCORE
  d: UID        = User Id                 0x00000400  PF_SIGNALED
  f: GROUP      = Group Name              0x00000800  PF_MEMALLOC
  g: TTY        = Controlling Tty         0x00002000  PF_FREE_PAGES (2.5)
  j: #C         = Last used cpu (SMP)     0x00008000  debug flag (2.5)
  p: SWAP       = Swapped size (kb)       0x00024000  special threads (2.5)
  l: TIME       = CPU Time                0x001D0000  special states (2.5)
  r: CODE       = Code size (kb)          0x00100000  PF_USEDFPU (thru 2.4)
  s: DATA       = Data+Stack size (kb)