Linuxコマンド–トップ
1. 概要
システム内の各プロセスとスレッドのリソース使用量を知る必要がある状況に陥ることはよくあることです。 たとえば、どのプロセスがシステムの速度を低下させているかを知りたい場合があります。
このチュートリアルでは、topコマンドを使用してこの種の洞察を得る方法を見ていきます。
2. デフォルトのインターフェース
コマンドラインでtopと入力するだけで、 top を使用できます。その後、インタラクティブなインターフェイスが表示されます。
top
top - 04:05:27 up 3 days, 12:02, 1 user, load average: 0.55, 1.06, 1.27
Tasks: 362 total, 2 running, 290 sleeping, 0 stopped, 0 zombie
%Cpu(s): 35.8 us, 10.7 sy, 0.0 ni, 52.4 id, 0.3 wa, 0.0 hi, 0.7 si, 0.0 st
KiB Mem : 8060436 total, 150704 free, 4438276 used, 3471456 buff/cache
KiB Swap: 2097148 total, 1656152 free, 440996 used. 2557604 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32081 abhishe+ 20 0 879676 198164 106096 S 152.6 2.5 0:10.16 chrome
582 abhishe+ 20 0 51448 4088 3372 R 15.8 0.1 0:00.04 top
503 root -51 0 0 0 0 S 5.3 0.0 11:05.61 irq/130-iwlwifi
875 message+ 20 0 53120 5900 3204 S 5.3 0.1 10:10.14 dbus-daemon
6855 abhishe+ 20 0 1564544 170444 22924 S 5.3 2.1 75:21.88 deluge-gtk
1 root 20 0 225840 7200 4720 S 0.0 0.1 4:51.28 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.20 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
このインタラクティブ画面は、次の4つのセクションに分かれています。
- 概要
- フィールド/列ヘッダー
- 入力/メッセージ行
- タスク
2.1. 概要
最初の行は5つのもので構成されています。
- ウィンドウの名前
- 現在の時刻
- 前回の起動からの時間
- ユーザーの総数、および
- 過去1、5、および15分間の平均システム負荷
top - 04:05:27 up 3 days, 12:02, 1 user, load average: 0.55, 1.06, 1.27
2行目は、実行中、スリープ中、停止中、およびゾンビの4つのカテゴリに分類されたさまざまなプロセスとスレッドの数を示していることがわかります。
次の行は、CPU状態のパーセンテージ、つまり、ユーザープロセスとカーネルプロセスにかかる時間について示しています。
Tasks: 362 total, 2 running, 290 sleeping, 0 stopped, 0 zombie
%Cpu(s): 35.8 us, 10.7 sy, 0.0 ni, 52.4 id, 0.3 wa, 0.0 hi, 0.7 si, 0.0 st
上記の例でのさまざまな記号の意味は、CPUがさまざまなプロセスを実行するのにかかる時間です。
- us –ユーザープロセス(ユーザー定義の優先度なしで定義されます– 非ニックユーザープロセス)
- sy –カーネルプロセス
- ni –優れたユーザープロセス
- id –カーネルアイドルハンドラー
- wa – I/O完了
- hi –ハードウェア割り込み
- si –ソフトウェア割り込み
- st –ハイパーバイザーによってこのVMから盗まれた時間
4行目は物理メモリの状態を示していることがわかります。 5行目は仮想メモリについて説明しています。
KiB Mem : 8060436 total, 150704 free, 4438276 used, 3471456 buff/cache
KiB Swap: 2097148 total, 1656152 free, 440996 used. 2557604 avail Mem
3. topヘッダー
上記の例でわかるように、さまざまなプロセスとスレッドのステータスを説明するさまざまなフィールドがあります。
これらのヘッダーの意味を1つずつ学びましょう。
- PID (プロセスID):task_structによって定義されたタスクの一意のID–カーネルがプロセスを識別するために使用します
- USER (ユーザー名):タスクの所有者の有効なユーザー名
- PR (優先度):タスクのスケジューリング優先度。 このフィールドの下のrt値は、タスクがリアルタイムスケジューリングの優先順位付けの下で実行されていることを意味します
- NI (適切な値):タスクの優先度も示します。 PRとNIの違いは、 PR がカーネルから見たプロセスの真の優先順位であるのに対し、NIはカーネルの優先度のヒント。 負のnice値は優先度が高いことを意味し、正のnice値は優先度が低いことを意味します
- TIME + (CPU時間):タスクが開始されてから使用された合計CPU時間を示し、100分の1秒の粒度で表示されます。
- COMMAND (コマンド名):タスクの開始に使用するコマンドラインまたは関連するプログラムの名前を表示します
3.1. メモリヘッダー
メモリに関連するさまざまなパラメータを要約するために使用されるヘッダーを以下に説明します。
- VIRT (KiB単位の仮想メモリサイズ):タスクによって使用される仮想メモリの合計量を示します。 仮想メモリには、すべてのコード、データ、および共有ライブラリが含まれます。 スワップアウトされたページと、マップされたが使用されていないページも含まれます
- RES (KiB単位の常駐メモリサイズ):タスクが現在使用しているスワップされていない物理メモリを表す仮想メモリ空間( VIRT )のサブセットを表します
- SHR (KiBの共有メモリサイズ):他のプロセスで使用される可能性のある常駐メモリ( RES )のサブセットを表します
- %CPU (CPU使用率):最後の画面更新から経過したCPU時間のタスクのシェアを表し、合計CPU時間のパーセンテージとして表されます。 top がスレッドモードで実行されていない場合、マルチスレッドプロセスで100% cより大きい値が報告されます。
- %MEM (メモリ使用量-RES):使用可能な物理メモリのタスクの現在のシェア
4. インタラクティブコマンド
さまざまなコマンドを使用して、topインターフェイスを操作できます。
- 最も簡単なのは、hボタンを押してヘルプメニューを表示することです。
- dまたはsボタンを使用して、topのリフレッシュレートを変更できます。 デフォルトのリフレッシュレートは3.0秒です。
- top インターフェースを終了するには、qボタンを押します。
k ボタンを押すとタスクを強制終了できます。その後、「入力行」がアクティブになり、タスクのPIDを入力する必要があります。
r ボタンを押して、タスクのrenice値を変更することもできます。 その後、そのタスクの PID を入力し、次に renicevalueを入力します。 通常のユーザーはnice値を増やすことしかできず、下げることはできません。
E を押すと、サマリー領域にメモリを表示するために使用する単位をKiBから変更できます。
MiB Mem : 7871.520 total, 995.176 free, 4501.594 used, 2374.750 buff/cache
MiB Swap: 2047.996 total, 1607.332 free, 440.664 used. 2275.230 avail Mem
タスクエリアで使用するメモリユニットを変更するには、eを押します。
22011 abhishe+ 20 0 4049.7m 266.1m 138.3m S 13.2 3.4 18:08.67 gnome-shell
920 cyberea+ 20 0 2545.5m 110.4m 8.6m S 7.9 1.4 92:37.54 cybereason-sens
1554 abhishe+ 20 0 489.2m 69.9m 53.0m S 6.6 0.9 97:43.26 Xorg
6855 abhishe+ 20 0 1536.8m 174.6m 21.6m S 6.6 2.2 85:00.29 deluge-gtk
23393 abhishe+ 20 0 1689.2m 197.4m 63.4m S 6.0 2.5 3:09.83 _Postman
これらは両方とも、KiBからEiB(エクスビバイト)までのメモリユニットの循環につながります。
4.1. グローバルモード
さまざまな場合に役立つさまざまなモードがあり、その1つがスレッドモードです。
デフォルトでは、topは各プロセスのすべてのスレッドの合計を表示します。 Hボタンを押すと変更できます。 この後、 top は、各プロセスの個々のスレッドを表示します。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6855 abhishe+ 20 0 1573660 178760 22124 S 2.6 2.2 45:11.77 deluge-gtk
6899 abhishe+ 20 0 1573660 178760 22124 S 2.3 2.2 37:41.68 deluge-gtk
前の例でわかるように、 deluge という名前のアプリケーションは、基になるスレッドが表示されていないため、一度だけ言及されましたが、この例では、このアプリケーションで使用される2つの異なるスレッドを確認できます。
もう1つのモードはSolarisモードで、Iボタンを押すとオフに切り替えることができます。 このモードで動作している場合、タスクのCPU使用率はCPUの総数で除算されます。
4.2. タスクウィンドウとの相互作用
f ボタンを押すと、表示されるフィールドとその順序を変更できます。 フィールドメニューが開き、表示するフィールド、その順序、フィールドでの並べ替えなどを選択できます。
top によって表示される最も便利なビューの1つは、フォレストビューモードです。 このモードでは、タスクはツリーのように順序付けられ、すべての子タスクはそれぞれの親の下に配置されます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 225840 7196 4716 S 0.0 0.1 5:46.79 systemd
283 root 19 -1 148972 37300 36300 S 0.0 0.5 0:23.01 `- systemd-journal
336 root 20 0 47060 4000 2528 S 0.0 0.0 0:01.10 `- systemd-udevd
862 systemd+ 20 0 146112 1276 1208 S 0.0 0.0 0:00.35 `- systemd-timesyn
864 systemd+ 20 0 71072 4556 3916 S 0.0 0.1 0:12.47 `- systemd-resolve
867 root 20 0 70728 3732 3448 S 0.0 0.0 0:03.05 `- systemd-logind
871 root 20 0 38428 2748 2652 S 0.0 0.0 0:00.27 `- cron
x キーを使用して、ソートされたフィールドを強調表示できます。 使用できます >> と < ソートされたフィールドをそれぞれ右または左に変更します。 一部のフィールドには、並べ替え用の直接キーバインディングがあります。%MEMの場合はM 、 PIDの場合はN、Pの場合%CPU の場合、 T 、 TIME+の場合。
5. コマンドラインオプション
-b フラグを渡すことにより、バッチモードでtopを使用できます。 バッチモードの場合、topは入力を受け取らず、プログラムが強制終了されるまで実行されます。 これは、topコマンドの出力を他のプログラムまたはファイルに渡す場合に非常に便利です。
反復回数を修正するには、-nフラグを使用できます。
top -b -n10
リフレッシュレートを変更するには、-dフラグを使用できます。 このフラグでは、秒の小数を使用できます。
top -d2.5
top でサポートされているすべての出力フィールドを表示するには、-Oフラグを使用できます。
top -O
PID
PPID
UID
USER
... more output omitted
これらのフィールド名を使用して、 -oフラグの後に並べ替え順序を渡すことができます。 したがって、topの出力を仮想メモリで並べ替える場合は、次を使用できます。
top -o VIRT
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23584 abhishe+ 20 0 14.593g 554600 58412 S 2.3 6.9 10:25.55 _Postman
22011 abhishe+ 20 0 4142400 277884 141424 S 0.7 3.4 22:00.86 gnome-shell
1183 gdm 20 0 3664328 114104 72160 S 0.0 1.4 6:33.79 gnome-shell
2008 abhishe+ 20 0 2782760 22520 15096 S 0.0 0.3 0:35.15 copyq
次に、 PID 、ユーザーなどに基づいて、さまざまなフィルターを使用してタスクを監視できます。 PID に基づいてタスクをフィルタリングするには、-pフラグを使用して最大20個のPIDを渡すことができます。
top -p23584,22011
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22011 abhishe+ 20 0 4144624 276900 141368 S 6.2 3.4 22:16.92 gnome-shell
23584 abhishe+ 20 0 14.593g 554600 58412 S 0.0 6.9 10:29.91 _Postman
最後に、ユーザーに基づいてフィルタリングするために、-uフラグを使用できます。
top -u root
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
503 root -51 0 0 0 0 S 6.2 0.0 12:55.09 irq/130-iwlwifi
1 root 20 0 225840 7196 4716 S 0.0 0.1 5:43.72 systemd
6. 結論
このチュートリアルでは、 top がさまざまなプロセスとスレッドのメモリ使用量を把握し、それらを監視するのにどのように役立つかを見ました。
そのインタラクティブな画面を見て、さまざまなフィールドの意味と使用法を探りました。
また、さまざまな便利なコマンドラインオプションも確認しました。