はじめに

こんにちは!今回はtopコマンドについて解説します。

topはシステムのプロセスをリアルタイムで監視するコマンドです。CPU使用率やメモリ使用量、プロセスの状態などが一画面で見られます。

「このサーバー、何で遅いんだろう?」「どのプログラムがメモリを食ってる?」って時に超便利ですよ。サーバー運用では必須ツールです。

topコマンドとは

topは、システム全体の状態とプロセスの使用状況をリアルタイムで表示する監視ツールです。“table of processes"の略ですね。

CPU使用率、メモリ使用量、ロードアベレージ、実行中のプロセスなど、システムのすべての重要情報を一画面で確認できます。サーバーの負荷分析やトラブルシューティング、パフォーマンス監視に欠かせないコマンドです。

基本構文

1
top [オプション]

オプション付きで起動できます。何もオプションなしで実行することがほとんどです。

1
top -p PID

特定のプロセスIDのみを監視することもできます。

主なオプション

オプション 説明
-b バッチモード(非対話的)。ログに保存する時に使う
-n NUM バッチモードで出力する回数を指定
-p PID 指定したPIDのプロセスのみを表示
-u USER 指定したユーザーのプロセスのみを表示
-H スレッド表示(各スレッドを個別に表示)
-d DELAY 更新間隔を秒単位で指定(デフォルト3秒)
-i アイドルプロセスを非表示にする
-c コマンドラインの完全パスを表示

使用例

例1: 基本的な実行

1
top

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
top - 12:34:56 up 10:23,  1 user,  load average: 0.45, 0.38, 0.32
Tasks:  92 total,   1 running,  91 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.2 us,  2.1 sy,  0.0 ni, 92.4 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :   7872.7 total,   4523.2 free,   2145.1 used,   1204.4 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   5274.6 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 user      20   0  234567  45678  12345 S   3.5   0.6   1:23.45 firefox
 5678 root      20   0  123456  23456   5678 S   2.1   0.3   0:45.23 systemd
 9012 user      20   0   45678  12345   3456 S   1.2   0.2   0:12.34 bash

topを実行するとインタラクティブ画面が開きます。システム情報とプロセス一覧が表示されます。

例2: 特定ユーザーのプロセスのみを表示

1
top -u user

実行結果:

1
(userというユーザーが実行しているプロセスのみが表示される)

指定したユーザーのプロセスだけを監視できます。マルチユーザーシステムで便利です。

例3: バッチモードで1回のみ出力

1
top -b -n 1

実行結果:

1
2
3
top - 12:34:56 up 10:23,  1 user,  load average: 0.45, 0.38, 0.32
Tasks:  92 total,   1 running,  91 sleeping,   0 stopped,   0 zombie
...(プロセス情報)

バッチモード(非対話的)で1回だけ出力します。スクリプトで使ったりログに保存する時に便利です。

例4: バッチモードで3回出力(2秒間隔)

1
top -b -n 3 -d 2

実行結果:

1
(3回分の出力が2秒間隔で表示される)

定期的にシステム状態をキャプチャしたい時に使います。

例5: 特定のプロセスのみ監視

1
top -p 1234

実行結果:

1
2
3
4
5
top - 12:34:56 up 10:23,  1 user,  load average: 0.45, 0.38, 0.32
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
...
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 user      20   0  234567  45678  12345 S   3.5   0.6   1:23.45 firefox

特定のプロセスIDのみを監視します。複数PIDを監視する場合は-p PID1,PID2,PID3と指定できます。

例6: インタラクティブモードでメモリ使用量でソート

1
top

実行後、キー入力で操作します:

1
2
3
4
5
M キー: メモリ使用量でソート
P キー: CPU使用率でソート
T キー: 実行時間でソート
R キー: ソート順を反転
q キー: topを終了

インタラクティブモードでは、キーボード操作でいろいろな表示切り替えができます。

例7: 更新間隔を1秒に設定

1
top -d 1

実行結果:

1
(1秒ごとに画面更新される)

デフォルトは3秒ですが、1秒単位で監視したい時に使います。ただし負荷が高くなります。

例8: スレッドも表示

1
top -H

実行結果:

1
(各スレッドが個別に表示される)

マルチスレッドプロセスを詳細に監視する時に使います。

例9: バッチモードでファイルに保存

1
top -b -n 1 > system_info.txt

実行結果:

1
(system_info.txtにシステム情報が保存される)

ログとして記録する時に便利です。定期実行スクリプトで使えます。

例10: 複数プロセスを監視

1
top -p 1234,5678,9012

実行結果:

1
(指定した3つのプロセスのみが表示される)

複数のプロセスを同時監視したい時に使います。

例11: アイドルプロセスを非表示

1
top -i

実行結果:

1
(スリープ中のプロセスが表示されない)

アクティブなプロセスだけに絞って監視できます。

例12: コマンドラインを完全表示

1
top -c

実行結果:

1
(プロセスのコマンドラインが完全に表示される)

プロセスの実行パスと引数がすべて見えます。

Tips・注意点

ロードアベレージの見方

1
load average: 0.45, 0.38, 0.32

3つの数字は直近1分、5分、15分の平均負荷です。CPU個数以上だと負荷が高いです。

メモリ情報の理解

1
MiB Mem :   7872.7 total,   4523.2 free,   2145.1 used,   1204.4 buff/cache

実質的な空きメモリは「free + buff/cache」です。usedが大きく見えても、buff/cacheはすぐに開放されるので問題ありません。

プロセス終了方法

topを実行中にkキーを押すと、プロセスを終了(kill)できます。

1
PID to kill: 1234

と聞かれるので、PIDを入力します。

CPU使用率が合わない理由

複数CPU/コアがあると、各コアの負荷が表示されます。Cpu(s):の合計がコア数によって変わるのは正常です。

メモリ監視に特化した表示

1
top -o %MEM

メモリ使用量でソートして表示します。-oでソート列を指定できます。

実践的な使い方

サーバーの負荷確認

1
top -b -n 1 | head -20

サーバーが重くなった時に、まずこれを実行してCPU/メモリ状況を確認します。

メモリリーク検出

1
top -p PID -b -n 10 -d 5

特定プロセスのメモリ使用量を10回監視(5秒間隔)。メモリが増え続けていたらリーク疑い。

定期監視ログの取得

1
top -b -n 1 >> /var/log/top_monitor.log

cronで定期実行して、システムの履歴を記録します。

CPU使用率の高いプロセス特定

1
top -b -n 1 | grep -E "CPU|COMMAND" | head -5

CPU使用率が高いトップ5プロセスを表示します。

まとめ

topコマンドのポイント:

  • システムのプロセスをリアルタイムで監視する必須ツール
  • -b: バッチモード(スクリプトやログ保存に便利)
  • -n NUM: 出力回数を指定
  • -p PID: 特定プロセスのみ監視
  • -u USER: 特定ユーザーのプロセスのみ表示
  • -d DELAY: 更新間隔を調整
  • インタラクティブモードでP/M/Tキーでソート切り替え可能
  • よく使う組み合わせ: top -b -n 1 | head -20top -u user

サーバー管理者のマストツール。CPU/メモリの問題はまずtopを見て判断しましょう!