topコマンドでCPU・メモリ使用率を確認する方法|load averageの見方もコマンド


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドP-T, プロセス管理コマンド > topコマンドでCPU・メモリ使用率を確認する方法|load averageの見方もコマンド
「サーバーが重いけど、何が原因なのか分からない」
「topコマンドを実行してみたけど、数字がたくさん並んでいて何を見ればいいのか分からない」
Linuxサーバーの運用で、こうした場面に遭遇したことはないでしょうか。

この記事では、Linuxの top コマンドを使ってCPU使用率やメモリ使用量をリアルタイムに監視する実践的な手順を解説します。
ヘッダー行(load average・タスク数・CPU%・メモリ/スワップ)の読み方から、操作キー、バッチモードでのスクリプト活用、さらにload averageが高い場合やCPUが100%に張り付いた場合のトラブルシュートまで、現場で必要な知識をまとめました。

topコマンドとは? サーバー監視の基本ツール

top は、Linuxに標準で入っているプロセス監視コマンドです。実行するとリアルタイムでCPU使用率・メモリ使用量・実行中のプロセス一覧が更新表示され、サーバーの「今の状態」をひと目で把握できます。

障害対応やパフォーマンス調査の第一歩として、現場で最も使われるコマンドの一つです。

# topコマンドの実行(終了するにはqキーを押す) # top

実行すると、画面の上部にシステム全体のサマリー(ヘッダー行)、下部にプロセスの一覧が表示されます。

topのヘッダー行の読み方

topの画面上部に表示される5行のヘッダーには、サーバーの状態を判断するために重要な情報が詰まっています。順番に見ていきましょう。

1. load average(負荷平均)

1行目の右端に表示される3つの数値が load average です。

top - 14:30:01 up 120 days, 3:15, 2 users, load average: 0.45, 0.60, 0.72

左から順に「1分間」「5分間」「15分間」の平均負荷を示しています。

この数値はCPUコア数と比較して判断します。例えば4コアのサーバーなら、load averageが4.0前後で「CPUがフル稼働」の状態です。コア数を超えた値が続いている場合は、処理待ちが発生しています。

# CPUコア数の確認方法 # nproc 4

2. タスク(プロセス数)

2行目には、システム上のプロセスの総数と状態別の内訳が表示されます。

Tasks: 215 total, 1 running, 214 sleeping, 0 stopped, 0 zombie

running:現在CPUで実行中のプロセス数
sleeping:待機中(入出力待ちなど)のプロセス数
stopped:停止中のプロセス数
zombie:終了処理が完了していないゾンビプロセス数

zombieが増え続けている場合は、親プロセスに問題がある可能性があります。

3. CPU使用率(%Cpu(s)行)

3行目はCPUの使用内訳です。

%Cpu(s): 5.2 us, 1.3 sy, 0.0 ni, 92.8 id, 0.5 wa, 0.0 hi, 0.2 si, 0.0 st

us(user):ユーザープロセスのCPU使用率
sy(system):カーネル(OS)のCPU使用率
ni(nice):nice値で優先度を変更したプロセスのCPU使用率
id(idle):アイドル(空き)の割合。この値が低いほどCPUが忙しい
wa(iowait):ディスクI/O待ちの割合。高い場合はディスクがボトルネック
hi(hardware interrupt):ハードウェア割り込みの使用率
si(software interrupt):ソフトウェア割り込みの使用率
st(steal):仮想マシン環境でホスト側に奪われたCPU時間

実務で特に注目すべきは id(空き)と wa(I/O待ち)です。idが極端に低ければCPU不足、waが高ければディスク性能がボトルネックと判断できます。

4. メモリ使用量(MiB Mem行)

4行目は物理メモリの使用状況です。

MiB Mem : 7953.5 total, 512.3 free, 3200.8 used, 4240.4 buff/cache

total:物理メモリの合計
free:未使用のメモリ
used:プロセスが使用しているメモリ
buff/cache:バッファ/キャッシュとして使われているメモリ

ここで重要なのは、freeが少なくても、すぐにメモリ不足とは限らないということです。Linuxは空きメモリをファイルのキャッシュに積極的に使います。buff/cacheは必要に応じてすぐに解放されるため、「free + buff/cache」が実質的に利用可能なメモリと考えてください。

5. スワップ使用量(MiB Swap行)

5行目はスワップ(ディスク上の仮想メモリ領域)の使用状況です。

MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4500.2 avail Mem

usedが大きい場合、物理メモリが足りずにディスクへの退避(スワップアウト)が発生しています。スワップはディスクI/Oを伴うため、パフォーマンスが大幅に低下します。

topの操作キー一覧

topは実行中にキーボードで操作を切り替えられます。覚えておくと作業効率が上がるキーをまとめます。

q:topを終了する
P(Shift+p):CPU使用率の高い順にソート(デフォルト)
M(Shift+m):メモリ使用量の高い順にソート
1(数字の1):CPUコアごとの使用率を個別表示する
c:プロセスのコマンドライン全体を表示する(引数やパスも見られる)
k:指定したPIDのプロセスにシグナルを送る(kill)
d:更新間隔(秒)を変更する
Shift+w:現在の表示設定を ~/.toprc に保存する

特に 1キーcキー は実務で頻繁に使います。1キーでコア別の偏りが分かり、cキーで「どのプログラムのどんな処理か」を特定できます。

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

1. 更新間隔を指定する(-d)

デフォルトでは3秒ごとに画面が更新されますが、-d オプションで変更できます。

# 5秒間隔で更新する # top -d 5

2. 更新回数を指定して自動終了する(-n)

-n オプションで、指定した回数だけ更新したら自動的に終了させられます。

# 3回更新したら自動終了 # top -n 3

3. 特定のプロセスだけ監視する(-p)

PID(プロセスID)を指定して、そのプロセスだけを表示できます。特定のサービスを監視したい場合に便利です。

# PID 1234 のプロセスだけ監視する # top -p 1234

4. 特定ユーザーのプロセスだけ表示する(-u)

-u オプションで、指定したユーザーが実行しているプロセスだけに絞り込めます。共用サーバーで「誰のプロセスがCPUを使っているのか」を調べる場面で重宝します。

# apache ユーザーのプロセスだけ表示する # top -u apache

5. バッチモードで出力する(-b)

-b(batch)オプションを使うと、topの出力を対話的な画面ではなくテキストとして出力します。ログファイルに保存したり、スクリプトから呼び出す場合に使います。

# バッチモードで1回だけ出力し、ファイルに保存する # top -b -n 1 > /tmp/top_output.txt

この方法は、cron(定期実行)と組み合わせてサーバーの負荷を定期記録する用途でよく使われます。

実務で役立つtopの活用テクニック

1. CPU使用率が高いプロセスを特定する手順

「サーバーが重い」と連絡を受けたときの基本的な調査手順です。

(1) top を実行して load average とCPU使用率を確認する
(2) P キー(デフォルト)でCPU使用率の高い順に並べる
(3) 上位に張り付いているプロセスのPIDとCOMMAND列を確認する
(4) c キーでコマンドラインの詳細を表示し、何の処理かを特定する

2. メモリを大量消費しているプロセスを探す

メモリ不足が疑われる場合は、以下の手順で調べます。

(1) top を実行する
(2) M キーでメモリ使用量順にソートする
(3) RES列(実際に使っている物理メモリ量)に注目する

RES列の値が極端に大きいプロセスがあれば、そのプロセスがメモリを消費している原因です。

3. バッチモードで定期的に記録する(cron連携)

障害発生時に「その時の状態」を振り返るためには、topの出力を定期的にファイルへ保存しておくのが有効です。

# crontabに以下を追加(5分ごとにtopの出力を記録する例) */5 * * * * top -b -n 1 >> /var/log/top_history.log 2>&1

注意点として、ログが無限に増え続けるため、logrotateと組み合わせるか、定期的に古いログを削除する仕組みが必要です。

load averageが高い場合の切り分け方法

load averageがCPUコア数を超えている場合、原因は大きく2つに分かれます。

1. CPU負荷が高い場合(us + sy が高い)

topのCPU行で us(ユーザープロセス)や sy(カーネル処理)が高い場合、特定のプロセスがCPUを消費しています。

(1) P キーでCPU順にソートし、原因プロセスを特定する
(2) c キーでコマンド詳細を確認する
(3) 必要に応じて kill コマンドやサービスの再起動で対処する

# PID 5678 のプロセスを終了する # kill 5678 # 強制終了する場合(通常のkillで止まらない場合のみ) # kill -9 5678

2. I/O待ちが高い場合(wa が高い)

topのCPU行で wa(iowait)が高い場合、ディスクI/Oがボトルネックです。CPUは実は暇で、ディスクの読み書きを待っている状態です。

(1) iostat コマンドでディスクごとのI/O状況を確認する
(2) iotop コマンドでどのプロセスがI/Oを発生させているか特定する

# ディスクI/Oの状況を確認する(sysstatパッケージが必要) # iostat -x 1 3 # プロセス別のI/O使用状況を確認する # iotop

topでCPUが100%に張り付いた場合の対処

特定のプロセスがCPU 100%を使い続けている場合の対処手順です。

1. 原因プロセスの特定

# topを実行し、CPU使用率でソート(デフォルト) # top # %CPU列が100%近いプロセスのPIDとCOMMANDを確認する # cキーでフルコマンドラインを表示

2. プロセスの詳細確認

topで特定したPIDについて、さらに詳しく調べます。

# プロセスの詳細情報を確認する # ps aux | grep PID番号 # プロセスが開いているファイルを確認する # ls -l /proc/PID番号/fd/

3. 対処の判断

・Webサーバー(httpd/nginx)の場合 → アクセスログを確認し、異常なアクセスがないか調べる
・バッチ処理の場合 → 処理が無限ループに陥っていないか、ログを確認する
・原因不明の場合 → strace -p PID番号 でプロセスのシステムコールを追跡して調査する

【重要】killする前の注意点

障害対応で焦ってプロセスを強制終了(kill -9)する前に、必ず以下を確認してください。

・そのプロセスを止めてもサービスに影響がないか
・データベース関連のプロセスの場合、データ破損のリスクがないか
・まず kill PID番号(SIGTERMシグナル)で正常終了を試み、応答がない場合にのみ kill -9 を使う

OOM Killer ~ メモリ不足でプロセスが強制終了される仕組み~

Linuxには、物理メモリとスワップの両方を使い切った場合に、カーネルが自動的にプロセスを強制終了する OOM Killer(Out Of Memory Killer)という仕組みがあります。

OOM Killerが発動すると、メモリを最も多く消費しているプロセスが選ばれて強制停止されます。本番サーバーでこれが発生すると、Webサーバーやデータベースが突然落ちるため、大きな障害につながります。

# OOM Killerが発動したかどうかをログで確認する # grep -i "oom" /var/log/messages # または # dmesg | grep -i "oom"

topでスワップのusedが増加し続けている場合は、OOM Killerが発動する前兆です。早めにメモリを大量消費しているプロセスを特定し、対処してください。

htopとの比較 ~ より見やすい代替ツール~

htop は、topの機能を強化した対話型プロセスビューアです。標準ではインストールされていませんが、視覚的に分かりやすいため多くの管理者が愛用しています。

項目 top htop
標準インストール あり(全ディストリビューション) なし(別途インストール)
操作性 キーボードショートカット中心 マウス操作対応、カラー表示
CPU表示 1キーでコア別切り替え 常にコア別バーグラフ表示
プロセスツリー 非対応 F5キーでツリー表示
スクリプト利用 -bオプションで対応 バッチモードなし

# htopのインストール(RHEL/CentOS/AlmaLinux) # yum install epel-release # yum install htop # htopのインストール(Ubuntu/Debian) # apt install htop

htopは見やすさで優れていますが、本番サーバーにはインストールされていないことが多いため、topの操作を確実に使えるようにしておくことが実務では重要です。

本記事のまとめ

やりたいこと コマンド / 操作
リアルタイムでプロセスを監視する top
更新間隔を変更する top -d 秒数
指定回数で自動終了する top -n 回数
特定プロセスだけ監視する top -p PID番号
特定ユーザーのプロセスだけ表示する top -u ユーザー名
バッチモードでファイルに保存する top -b -n 1 > ファイル名
CPU使用率順にソートする top実行中に P キー
メモリ使用量順にソートする top実行中に M キー
CPUコアごとの使用率を表示する top実行中に 1 キー
コマンドライン全体を表示する top実行中に c キー
CPUコア数を確認する nproc
OOM Killerの発動を確認する grep -i "oom" /var/log/messages

topコマンドの見方が分かったら、次はサーバー構築の「型」を身につけませんか?

topでプロセスやCPU使用率を確認できるようになったら、次のステップはサーバーの構築・運用を体系的に学ぶことです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

<<関連記事>>
・pstree
・chsh
・finger
・duコマンドでディスク使用量を確認する方法|ディレクトリごとの容量や容量順ソートも
・LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る