topコマンドでDebianのプロセス調査
WindowsにおいてプロセスのCPUやメモリの使用量を測定するものにタスクマネージャがあります。Debian(Linux)においてそのようなプロセスを監視するアプリのひとつにtopというものがあります。
今回はそのtopの使い方や見方を覚書として記しておきます。
基本的な使い方
基本的な利用方法はとても簡単です。単にコマンドラインから「top」と打つだけです。終了するには「q」を押します。
上記画面にはいろいろな情報が表示されています。順を追ってみていきます。
大きく分けて画面上部のサマリーと、下部のプロセスに分かれます。
上部画面
左から右、上から下の順で項目を見ていきます。
- top -
topの右側にある表示はデータを取得した時刻が入ります。
- up
upはシステムが稼働している時間数です。再起動すると0になりそこからカウントされていきます。
- users
usersはシェルにログインしている数です。自身も1とカウントします。
- load average
Qiita:「LoadAverage(ロードアベレージ)について」によると、この値は「実行待ちのプロセスの平均数」という事です。左から1分平均、5分、15分と並びます。
「実行待ち」という言葉を正確に表すと、TASK_RUNNINGと、TASK_UNINTERRUPTIBLE状態の二つだそうです。
ちなみにプロセスの状態は他にTASK_INTERRUPTIBLE、TASK_STOPPED、TASK_ZOMBIEがあります。
ここではプロセスと書いていますが、状態はTASK...となっています。ここではプロセスとTaskとほぼ同義で、ひとつのプロセスは複数のスレッドを持つことができます。
- Tasks
Tasks以降は、total(全)、running(稼働中)、sleeping(休止中)、stopped(停止中)、zonbie(実行終了中)となります。
- %Cpu(s)
%Cpu(s)であらわされる項目は、%がついている通り百分率で表され、さらに細分化されています。
- us(user)
ユーザープロセスが使用している割合
- sy(system)
システムプロセスが使用している割合
- ni(nice)
nice経由のプロセスが使用している割合です。niceとはユーザーが優先度を指定してコマンドを実行できるコマンドです。「nice -n n command」でnに優先度が高い値順に-20~19までを指定して、続けてコマンドを入力します。
- id(idle)
アイドルの割合です。
- wa(IO-wait)
IO(ディスク)側が待ち状態になっている時に発生します。注意したいのは、CPUが他の処理で埋まっているときはIO待ちにはならないので、IOが多くてもこの値には表れないという事です。
- hi(hardware interrupts)
ハードウェア割込み。キーボードやディスク、ネットワークなどにより発生した割込みです。
- si(software interrupts)
ソフトウェア割込み。
- st(stolen)
仮想OSが使用しているプロセスです。
- us(user)
- Mib Mem
メモリ使用量です。先頭が単位になっています(この場合はmebibyte)。 total(全)、free(未使用)、used(使用済)、buff/cache(バッファ・キャッシュ使用量)
バッファはmallocなどで割り当てたメモリ割り当て領域で使用した分です。キャッシュはファイルシステム等がキャッシュとして使用している分です。
- Mib Swap
インストール時に設定したスワップ領域の使用量です。物理メモリが不足すると利用されます。total(全)、free(未使用)、used(使用済)、avail Mem(物理メモリ残)
下部画面
下部画面はQiita:「free, top コマンド」を参考にさせていただきました。
CPU使用率でソートされ表示されます
- PID
プロセスID
- USER
実行ユーザー
- PR
優先度
- NI
nice優先度
- VIRT
仮想メモリ
- RES
物理メモリ
- SHR
共有メモリ
- S
状態。D(割込不能)、R(実行中)、S(休止中)、T(停止中)、Z(ゾンビ)
- %CPU
CPU使用率
- %MEM
メモリ使用率
- TIME+
CPU使用時間。
- COMMAND
実行中のコマンド
表示のカスタマイズ
-pオプションでプロセスIDを指定して表示することができます。監視対象のプロセスが特定できたらこちらの方が見やすいです。
-dオプションの後ss.ttの表記で更新頻度を変更できます。
表示項目の変更は、top表示中にfキーを押します。上下で項目の選択、スペースで対象の項目、sでソート対象列の指定、ENTERで決定、qで中止です。
表示順位を変えるには→を押すと、全選択状態になるのでその状態で上下で移動させ←を押すとその位置に指定します。
メモリとCPUについてはソート用のショートカットがあります。shift pでCPU、shift m でMemoryです。
他不明なことがあれば「man top」から確認するようにします。
topコマンドで何が解決できるか
筆者の場合、時折サーバーの処理が遅くなるという現象が発生していて、topコマンドを表示しながら眺めていたところ、ちょうど遅くなるタイミングと似た間隔でwaの値が大きくなっていることに気づきました。waはIO-waitなのでディスクアクセスが遅いという事です。
ここからアプリをiotopに変えて、-aオプション(累積表示)を付けて調べてみたのですが、リストに上がってくるのはjdb2やkwokerといったシステム系のもの。加えてcollectdもIOが多かったのですがこれはiotopで使っているから表示されるような気もします。
SSDに変えるぐらいしか対処方法はなさそうですが、そのまえにログ出力をもう少し減らしてみようと思います。