topコマンドとは?LinuxでCPU・メモリ使用率とプロセスをリアルタイム確認する方法

Linux

LinuxでCPU使用率やメモリ使用量、実行中のプロセスをリアルタイムで確認したいときは、topコマンドを使用します。

前回解説したvmstatコマンドでは、メモリ、スワップ、CPU、I/Oの全体的な動きを確認できました。

ただし、vmstatだけでは「どのプロセスがCPUを使っているのか」「どのプロセスがメモリを大量に使っているのか」までは分かりにくいです。

そのようなときに便利なのがtopコマンドです。

topを使うと、システム全体のCPU・メモリ状況に加えて、プロセスごとの使用率をリアルタイムで確認できます。

この記事では、Linux初心者でも実際に使えるように、topコマンドの基本画面、ロードアベレージ、CPU・メモリ欄、プロセス一覧の見方、並び替え、検索、プロセス終了、freevmstatpsとの違いまで実例付きで解説します。

  1. topコマンドとは
  2. topコマンドの基本構文
  3. top画面の全体構成
  4. 1行目の見方
  5. ロードアベレージとは
  6. Tasks行の見方
  7. CPU行の見方
  8. CPU使用率を見るポイント
  9. waが高い場合の見方
  10. メモリ行の見方
  11. Swap行の見方
  12. プロセス一覧の見方
  13. %CPU列の見方
  14. %MEM列の見方
  15. VIRT・RES・SHRの違い
  16. プロセス状態S列の見方
  17. topを終了する方法
  18. CPU使用率順に並び替える方法
  19. メモリ使用率順に並び替える方法
  20. 累積CPU時間順に並び替える方法
  21. 表示間隔を変更する方法
  22. 特定ユーザーのプロセスだけ表示する方法
  23. 特定PIDだけ表示する方法
  24. 特定プロセスを終了する方法
  25. nice値を変更する方法
  26. コマンドライン全体を表示する方法
  27. CPUコアごとの使用率を表示する方法
  28. スレッド単位で表示する方法
  29. 表示回数を指定する方法
  30. バッチモードで出力する方法
  31. 更新間隔と回数を組み合わせる方法
  32. 並び替え列を指定して起動する方法
  33. topコマンドの主なオプション
  34. top実行中によく使うキー
  35. topとfreeコマンドの違い
  36. topとvmstatコマンドの違い
  37. topとpsコマンドの違い
  38. topとhtopの違い
  39. サーバーが重いときのtop確認手順
    1. 1. topを起動する
    2. 2. ロードアベレージを確認する
    3. 3. CPU欄を確認する
    4. 4. CPU使用率順に並び替える
    5. 5. メモリ使用率順も確認する
    6. 6. 必要に応じてコマンドライン全体を表示する
    7. 7. vmstatやiostatで追加確認する
  40. CPU負荷が高いときの見方
  41. メモリ不足が疑われるときの見方
  42. I/O待ちが疑われるときの見方
  43. topコマンドでよく使う実用例
    1. 通常表示する
    2. 特定ユーザーだけ表示する
    3. 特定PIDだけ表示する
    4. 2秒ごとに更新する
    5. 1回だけ表示する
    6. 2秒ごとに5回ログへ保存する
    7. メモリ使用率順で起動する
  44. topコマンドでよくある注意点
    1. %CPUだけで原因を断定しない
    2. VIRTが大きいだけでメモリ不足と判断しない
    3. waが高い場合はディスクを疑う
    4. kill -9を安易に使わない
  45. topコマンドでよくあるエラー・疑問
    1. command not found
    2. CPU使用率が100%を超える
    3. topの表示が速すぎる
    4. プロセス名だけでは分からない
    5. 特定ユーザーだけ見たい
  46. よくある質問
    1. topコマンドは何に使いますか?
    2. topを終了するには?
    3. CPU使用率順に並び替えるには?
    4. メモリ使用率順に並び替えるには?
    5. ロードアベレージはどう見ればよいですか?
    6. %CPUが100を超えるのは異常ですか?
    7. VIRTとRESはどちらを見ればよいですか?
    8. 特定ユーザーのプロセスだけ表示できますか?
    9. topとpsの違いは何ですか?
    10. UbuntuやCentOS Streamでも使えますか?
  47. まとめ

topコマンドとは

topは、Linuxでシステム全体の負荷と実行中プロセスをリアルタイム表示するコマンドです。

基本的には次のように実行します。

top

実行すると画面が定期的に更新され、次のような情報を確認できます。

  • 稼働時間
  • ログインユーザー数
  • ロードアベレージ
  • プロセス数
  • CPU使用率
  • メモリ使用量
  • スワップ使用量
  • プロセスごとのCPU使用率
  • プロセスごとのメモリ使用率

サーバーが重いときに、原因となっているプロセスを探す入口として非常によく使われます。

topコマンドの基本構文

topコマンドの基本構文は次のとおりです。

top [オプション]

通常はオプションなしで実行します。

top

特定ユーザーのプロセスだけ表示したい場合は、-uを使用します。

top -u hayana

特定PIDだけ表示する場合は、-pを使用します。

top -p 1234

top画面の全体構成

topの画面は、大きく2つに分かれています。

  • 上部:システム全体の状態
  • 下部:プロセスごとの一覧

実行結果の例です。

top - 10:00:01 up 12 days,  3:20,  1 user,  load average: 0.25, 0.18, 0.12
Tasks: 128 total,   1 running, 127 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.0 us,  2.0 sy,  0.0 ni, 92.0 id,  1.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1960.0 total,    240.0 free,    850.0 used,    870.0 buff/cache
MiB Swap:   2048.0 total,   1920.0 free,    128.0 used.    890.0 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   2345 mysql     20   0 1720000 420000  20000 S  35.0  20.9  12:30.45 mysqld
   4567 nginx     20   0  120000  35000  10000 S  10.0   1.7   1:20.10 nginx
   6789 user      20   0  250000  80000  15000 R   5.0   4.0   0:30.00 python

最初は情報量が多く見えますが、順番に見れば難しくありません。

1行目の見方

最初の1行には、現在時刻、稼働時間、ログインユーザー数、ロードアベレージが表示されます。

top - 10:00:01 up 12 days, 3:20, 1 user, load average: 0.25, 0.18, 0.12
項目 意味
10:00:01 現在時刻
up 12 days, 3:20 システム稼働時間
1 user ログインユーザー数
load average システム負荷の平均

ロードアベレージとは

ロードアベレージは、実行待ちや処理待ちのタスク数を表す目安です。

load average: 0.25, 0.18, 0.12

3つの数値は、左から次の期間を表します。

  • 1分間
  • 5分間
  • 15分間

ロードアベレージはCPUコア数との比較で見ると分かりやすいです。

たとえば、1コア環境でロードアベレージが常に2.0や3.0なら、処理待ちが発生している可能性があります。

4コア環境でロードアベレージが1.0程度なら、比較的余裕があると考えられます。

ただし、I/O待ちもロードに影響するため、数値だけでCPU不足と断定しないようにしましょう。

Tasks行の見方

Tasks行には、プロセスの状態が表示されます。

Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
項目 意味
total プロセス総数
running 実行中のプロセス数
sleeping 待機中のプロセス数
stopped 停止中のプロセス数
zombie ゾンビプロセス数

zombieが一時的に少数あるだけなら、すぐに問題とは限りません。

ただし、増え続ける場合は親プロセス側の不具合を疑います。

CPU行の見方

CPU行には、CPU時間の内訳が表示されます。

%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 92.0 id, 1.0 wa, 0.0 hi, 0.0 si, 0.0 st
項目 意味
us ユーザー処理で使われた割合
sy カーネル処理で使われた割合
ni nice値を変更したプロセスが使った割合
id CPUが空いている割合
wa I/O待ちの割合
hi ハードウェア割り込み処理
si ソフトウェア割り込み処理
st 仮想環境で他のVMに使われた割合

初心者はまずussyidwaを確認しましょう。

CPU使用率を見るポイント

ussyが高く、idが低い状態が続く場合、CPU負荷が高い可能性があります。

例です。

%Cpu(s): 80.0 us, 10.0 sy, 0.0 ni, 8.0 id, 2.0 wa

CPUの空きが8%しかなく、ユーザー処理で80%使われています。

この場合は、プロセス一覧の%CPU列を確認して、負荷の高いプロセスを探します。

waが高い場合の見方

waが高い場合、CPU自体が忙しいのではなく、ディスクI/O待ちで処理が進んでいない可能性があります。

%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 40.0 id, 53.0 wa

この例ではwaが53%と高く、I/O待ちが疑われます。

詳しく確認する場合は、vmstatiostatを使います。

vmstat 1
iostat -x 1

メモリ行の見方

メモリ行には、物理メモリの状態が表示されます。

MiB Mem : 1960.0 total, 240.0 free, 850.0 used, 870.0 buff/cache
項目 意味
total 物理メモリの合計
free 完全に未使用のメモリ
used 使用中のメモリ
buff/cache バッファ・キャッシュとして使われているメモリ

freeが少なくても、すぐにメモリ不足とは限りません。

Linuxは空きメモリをキャッシュとして活用するため、buff/cacheが大きくなることがあります。

詳しく見る場合はfree -havailableを確認しましょう。

free -h

Swap行の見方

スワップ行には、スワップ領域の状態が表示されます。

MiB Swap: 2048.0 total, 1920.0 free, 128.0 used. 890.0 avail Mem
項目 意味
total スワップの合計
free 空いているスワップ
used 使用中のスワップ
avail Mem 利用可能と見込まれる物理メモリ

スワップが少し使われているだけなら、すぐに問題とは限りません。

ただし、スワップ使用量が増え続け、サーバーが重い場合はメモリ不足の可能性があります。

プロセス一覧の見方

画面下部には、実行中プロセスの一覧が表示されます。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
項目 意味
PID プロセスID
USER 実行ユーザー
PR 優先度
NI nice値
VIRT 仮想メモリ使用量
RES 実メモリ使用量
SHR 共有メモリ量
S プロセス状態
%CPU CPU使用率
%MEM 物理メモリ使用率
TIME+ 累積CPU時間
COMMAND コマンド名

%CPU列の見方

%CPUは、各プロセスのCPU使用率です。

%CPU
35.0

CPU負荷が高い原因を探すときは、この列を見ます。

マルチコア環境では、設定や表示方法によって100%を超える値が表示される場合があります。

たとえば、2コアをほぼ使い切るプロセスが約200%と表示されることがあります。

%MEM列の見方

%MEMは、物理メモリ全体に対する各プロセスの使用率です。

%MEM
20.9

メモリ不足が疑われる場合は、%MEMが高いプロセスを確認します。

ただし、実際の使用量を見る場合はRES列も確認すると分かりやすいです。

VIRT・RES・SHRの違い

項目 意味 初心者向けの見方
VIRT プロセスが確保している仮想メモリ全体 大きくても即問題とは限らない
RES 実際に物理メモリ上にある量 実メモリ使用量の目安
SHR 他プロセスと共有可能なメモリ量 共有ライブラリなどを含む

メモリ使用量を見るときは、まず%MEMRESを重視すると分かりやすいです。

プロセス状態S列の見方

S列には、プロセスの状態が1文字で表示されます。

意味
R 実行中または実行可能
S 割り込み可能なスリープ
D 割り込み不可スリープ
T 停止中
Z ゾンビプロセス

Dが多い状態が続く場合、I/O待ちなどで詰まっている可能性があります。

topを終了する方法

topを終了するには、qキーを押します。

q

Ctrl + Cでも終了できますが、通常はqを使います。

CPU使用率順に並び替える方法

top実行中に大文字のPを押すと、CPU使用率順に並び替えられます。

Shift + P

CPU負荷の高いプロセスを探すときに便利です。

メモリ使用率順に並び替える方法

大文字のMを押すと、メモリ使用率順に並び替えられます。

Shift + M

メモリを大量に使っているプロセスを探すときに使います。

累積CPU時間順に並び替える方法

大文字のTを押すと、累積CPU時間順に並び替えられます。

Shift + T

長時間CPUを使っているプロセスを確認したいときに便利です。

表示間隔を変更する方法

top実行中にdまたはsを押すと、更新間隔を変更できます。

また、起動時に-dオプションで指定できます。

top -d 2

この例では、2秒ごとに更新します。

特定ユーザーのプロセスだけ表示する方法

-uオプションを使うと、特定ユーザーのプロセスだけ表示できます。

top -u mysql

特定サービス用ユーザーのプロセスを確認したいときに便利です。

実行中にuを押してユーザー名を入力する方法もあります。

特定PIDだけ表示する方法

-pオプションを使うと、特定PIDだけ表示できます。

top -p 2345

複数PIDをカンマ区切りで指定できる環境もあります。

top -p 2345,4567

特定プロセスを終了する方法

top実行中にkを押すと、指定したPIDへシグナルを送れます。

k

PIDを入力し、次にシグナル番号を指定します。

通常の終了要求は15です。

15

強制終了の9も指定できますが、データ破損や処理中断の可能性があるため、最後の手段として使いましょう。

nice値を変更する方法

top実行中にrを押すと、プロセスのnice値を変更できます。

r

nice値は、CPUスケジューリング上の優先度に関係します。

一般ユーザーは優先度を下げる方向には変更できますが、優先度を上げるには管理者権限が必要になることがあります。

コマンドライン全体を表示する方法

top実行中にcを押すと、コマンド名と完全なコマンドライン表示を切り替えられます。

c

同じ名前のプロセスが複数ある場合や、起動引数を確認したいときに便利です。

CPUコアごとの使用率を表示する方法

top実行中に数字の1を押すと、CPUコアごとの使用率表示へ切り替えられます。

1

マルチコア環境で、特定コアだけ高負荷になっていないか確認するときに便利です。

スレッド単位で表示する方法

-Hオプションを使うと、スレッド単位で表示できます。

top -H

実行中に大文字のHを押して切り替えられる環境もあります。

Javaやデータベースなど、1プロセス内に多くのスレッドを持つアプリケーションの調査に役立ちます。

表示回数を指定する方法

-nオプションを使うと、更新回数を指定できます。

top -n 1

1回だけ表示して終了します。

スクリプトやログ取得で便利です。

バッチモードで出力する方法

-bオプションを使うと、対話画面ではなくバッチ向け形式で表示できます。

top -b -n 1

ファイルへ保存する例です。

top -b -n 1 > top.log

監視スクリプトやログ収集でよく使われます。

更新間隔と回数を組み合わせる方法

2秒ごとに5回表示して終了する例です。

top -b -d 2 -n 5

一定期間だけ負荷状況を記録したいときに便利です。

並び替え列を指定して起動する方法

-oオプションを使うと、並び替え列を指定できます。

CPU使用率順の例です。

top -o %CPU

メモリ使用率順の例です。

top -o %MEM

環境やバージョンによって使える列名が異なる場合があります。

topコマンドの主なオプション

オプション 説明
-u ユーザー 指定ユーザーのプロセスだけ表示する
-p PID 指定PIDだけ表示する
-d 秒数 更新間隔を指定する
-n 回数 更新回数を指定する
-b バッチモードで表示する
-H スレッド単位で表示する
-o 列名 並び替え列を指定する
-c 完全なコマンドライン表示で起動する
-h ヘルプを表示する
-v バージョン情報を表示する

top実行中によく使うキー

キー 操作
q 終了する
P CPU使用率順に並び替える
M メモリ使用率順に並び替える
T 累積CPU時間順に並び替える
1 CPUコアごとの表示を切り替える
c コマンド名と完全なコマンドライン表示を切り替える
u ユーザーで絞り込む
k プロセスへシグナルを送る
r nice値を変更する
h ヘルプを表示する

topとfreeコマンドの違い

freetopは、どちらもメモリ確認で使いますが、用途が違います。

コマンド 主な用途
free メモリとスワップの全体量を簡潔に確認する
top システム全体とプロセスごとの使用状況をリアルタイム確認する

メモリ全体の余裕を見るならfree -h、原因プロセスを探すならtopが便利です。

topとvmstatコマンドの違い

vmstatは、メモリ、スワップ、CPU、I/Oの全体的な動きを確認するコマンドです。

topは、プロセスごとのCPU・メモリ使用率をリアルタイムで確認するコマンドです。

コマンド 主な用途
vmstat システム全体の傾向を確認する
top 負荷の原因となるプロセスを探す

vmstatでCPU負荷やI/O待ちの方向性を確認し、topで原因プロセスを探す流れが分かりやすいです。

topとpsコマンドの違い

psは、実行した時点のプロセス情報を一覧表示するコマンドです。

topは、画面を定期更新しながらリアルタイム表示します。

コマンド 主な用途
top リアルタイムで変化を見る
ps その時点の一覧を加工・検索する

継続監視にはtop、一覧の絞り込みやスクリプト処理にはpsが向いています。

topとhtopの違い

htopは、topをより見やすく操作しやすくした対話型ツールです。

カラー表示、マウス操作、ツリー表示などが使えることがあります。

コマンド 特徴
top 多くのLinux環境に標準搭載されている
htop 見やすく操作しやすいが追加インストールが必要なことがある

サーバーで必ず使える可能性が高いのはtopです。

サーバーが重いときのtop確認手順

1. topを起動する

top

2. ロードアベレージを確認する

CPUコア数に対して高すぎないか確認します。

3. CPU欄を確認する

ussyidwaを見ます。

4. CPU使用率順に並び替える

Shift + P

5. メモリ使用率順も確認する

Shift + M

6. 必要に応じてコマンドライン全体を表示する

c

7. vmstatやiostatで追加確認する

vmstat 1
iostat -x 1

topだけで原因を断定せず、必要に応じて他の監視コマンドと組み合わせましょう。

CPU負荷が高いときの見方

CPU負荷が高いときは、次の項目を確認します。

  • ロードアベレージが高い
  • idが低い
  • usまたはsyが高い
  • 特定プロセスの%CPUが高い

CPU使用率順に並び替えます。

Shift + P

原因プロセスが分かったら、ログや設定を確認して原因を調査します。

メモリ不足が疑われるときの見方

メモリ不足が疑われるときは、次の項目を確認します。

  • avail Memが少ない
  • Swapのusedが多い
  • 特定プロセスの%MEMRESが大きい
  • サーバーが重く、スワップ利用が増えている

メモリ使用率順に並び替えます。

Shift + M

さらにfree -hvmstat 1も確認しましょう。

free -h
vmstat 1

I/O待ちが疑われるときの見方

waが高い場合は、ディスクI/O待ちが疑われます。

また、D状態のプロセスが多い場合も、I/O待ちの可能性があります。

追加確認には次のコマンドを使います。

vmstat 1
iostat -x 1

topコマンドでよく使う実用例

通常表示する

top

特定ユーザーだけ表示する

top -u mysql

特定PIDだけ表示する

top -p 2345

2秒ごとに更新する

top -d 2

1回だけ表示する

top -b -n 1

2秒ごとに5回ログへ保存する

top -b -d 2 -n 5 > top.log

メモリ使用率順で起動する

top -o %MEM

topコマンドでよくある注意点

%CPUだけで原因を断定しない

CPU使用率が高くても、一時的な処理であれば問題ない場合があります。

高い状態が継続しているか、ロードアベレージや応答速度も確認しましょう。

VIRTが大きいだけでメモリ不足と判断しない

VIRTは仮想メモリ全体なので、大きくても実際に物理メモリを大量使用しているとは限りません。

RES%MEMを重視しましょう。

waが高い場合はディスクを疑う

waが高い場合、CPU不足ではなくI/O待ちの可能性があります。

iostatvmstatで追加確認します。

kill -9を安易に使わない

topからプロセスを終了できますが、いきなりシグナル9で強制終了すると、データ破損や不整合の原因になることがあります。

まず通常終了のシグナル15を検討しましょう。

topコマンドでよくあるエラー・疑問

command not found

top: command not found

topがインストールされていない可能性があります。

UbuntuやDebianではprocpsを確認します。

sudo apt install procps

CentOS Stream、Rocky Linux、AlmaLinuxではprocps-ngを確認します。

sudo dnf install procps-ng

CPU使用率が100%を超える

マルチコア環境では、プロセスのCPU使用率が100%を超えて表示される場合があります。

たとえば、2コアをほぼ使い切っているプロセスが約200%と表示されることがあります。

topの表示が速すぎる

更新間隔を変更します。

top -d 3

実行中にdまたはsを押して変更することもできます。

プロセス名だけでは分からない

cキーを押すと、完全なコマンドラインを表示できます。

c

特定ユーザーだけ見たい

-uを使います。

top -u nginx

よくある質問

topコマンドは何に使いますか?

LinuxでCPU、メモリ、スワップ、ロードアベレージ、実行中プロセスをリアルタイム確認するために使います。

topを終了するには?

qキーを押します。

CPU使用率順に並び替えるには?

Shift + Pを押します。

メモリ使用率順に並び替えるには?

Shift + Mを押します。

ロードアベレージはどう見ればよいですか?

CPUコア数と比較して見ます。1コア環境で1.0を大きく超える状態が続く場合は処理待ちの可能性があります。ただし、I/O待ちも含まれるため、CPU不足と断定せずwavmstatも確認しましょう。

%CPUが100を超えるのは異常ですか?

マルチコア環境では100%を超えることがあります。2コアを使い切るプロセスが約200%と表示される場合があります。

VIRTとRESはどちらを見ればよいですか?

実メモリ使用量を見るならRESを重視します。VIRTは仮想メモリ全体なので、大きくても即問題とは限りません。

特定ユーザーのプロセスだけ表示できますか?

-uオプションを使います。

top -u mysql

topとpsの違いは何ですか?

topはリアルタイム更新、psは実行時点のプロセス一覧表示に向いています。

UbuntuやCentOS Streamでも使えますか?

はい。Ubuntu、Debian、CentOS Stream、Rocky Linux、AlmaLinuxなど、多くのLinuxディストリビューションで利用できます。

まとめ

topコマンドは、LinuxでCPU、メモリ、スワップ、ロードアベレージ、プロセス状態をリアルタイム確認するためのコマンドです。

基本的な使い方は次のとおりです。

top

終了するにはqを押します。

CPU使用率順に並び替える場合はShift + P、メモリ使用率順に並び替える場合はShift + Mを使います。

特定ユーザーだけ表示する場合は、-uを指定します。

top -u mysql

1回だけ結果を取得したい場合は、バッチモードを使います。

top -b -n 1

topを見るときは、ロードアベレージ、ussyidwa%CPU%MEMRESを確認しましょう。

CPU負荷が高い原因を探すなら%CPU、メモリ不足を調べるなら%MEMRES、I/O待ちを疑うならwaを確認します。

必要に応じて、freevmstatiostatpsと組み合わせましょう。

free -h
vmstat 1
iostat -x 1
ps aux --sort=-%mem | head

topは、Linuxサーバーが重い原因を探すための基本コマンドです。まずはtopを起動し、Shift + PShift + MでCPU・メモリ使用率の高いプロセスを確認できるようになりましょう。

コメント

タイトルとURLをコピーしました