「メモリ使用量がじわじわ増えているけど、犯人を特定したい」
Linuxサーバーを運用していると、こうした「今この瞬間のサーバー状態を知りたい」という場面に必ず出くわします。そのとき真っ先に立ち上げるのが
top コマンドです。この記事では、
top コマンド を使ってCPU・メモリ使用状況を確認し、負荷の原因プロセスを特定する方法を解説します。load averageの読み方から、特定ユーザー・特定プロセスの絞り込み、対話操作(k で kill、r で renice、c でフルパス表示など)、systemd時代に併用すべきhtop / btop まで、現場で実際に使うテクニックをまとめました。・load averageの目安(CPUコア数との比較で判断)
・対話操作のショートカット(P:CPU順 / M:メモリ順 / k:kill / r:renice)
・特定ユーザー・特定プロセスだけ表示する -u / -p オプション
・top の上位互換 htop / btop の使いどころ
・よくあるトラブル(コマンドが見つからない / 終了できない / CPUが高くない重さ)の対処法
※本記事はsystemd前提(RHEL系9系、Ubuntu 22.04 / 24.04 LTS など)で動作確認しています。topはprocps-ngパッケージに含まれ、ほぼ全てのLinuxディストリビューションに標準で入っています。
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
topコマンドとは? サーバー監視の基本ツール
top は、Linuxに標準で入っているプロセス監視コマンドです。実行するとリアルタイムでCPU使用率・メモリ使用量・実行中のプロセス一覧が更新表示され、サーバーの「今の状態」をひと目で把握できます。障害対応やパフォーマンス調査の第一歩として、現場で最も使われるコマンドの一つです。
# topコマンドの実行(終了するにはqキーを押す) # top
なぜLinuxではコマンドでリソース監視をするのか
Windowsにはタスクマネージャーというアプリが最初から入っていますが、Linuxのサーバー環境ではGUI(デスクトップ画面)が存在しないことがほとんどです。管理者はSSH接続でターミナルから操作するため、リソースの確認もコマンドで行います。最初は不便に感じるかもしれませんが、慣れると SSH接続中の画面を離れずに即座に状態を把握できる というメリットが実感できます。GUI画面を開く手間がなく、操作のレスポンスも速い。
Linuxのリソース監視コマンドには主に以下の2種類があります。
| コマンド | 特徴 | インストール |
|---|---|---|
top |
標準搭載のリアルタイム監視ツール | 不要(最初から使える) |
htop |
カラー表示・マウス操作対応の拡張版 | 要インストール(apt/dnfで取得) |
まず
top を使いこなし、慣れてきたら htop に乗り換えるのが王道の流れです。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
この数値はCPUコア数と比較して判断します。例えば4コアのサーバーなら、load averageが4.0前後で「CPUがフル稼働」の状態です。コア数を超えた値が続いている場合は、処理待ちが発生しています。
# CPUコア数の確認方法 # nproc 4
2. タスク(プロセス数)
2行目には、システム上のプロセスの総数と状態別の内訳が表示されます。Tasks: 215 total, 1 running, 214 sleeping, 0 stopped, 0 zombie
・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
・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
・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
topの操作キー一覧
topは実行中にキーボードで操作を切り替えられます。覚えておくと作業効率が上がるキーをまとめます。・q:topを終了する
・P(Shift+p):CPU使用率の高い順にソート(デフォルト)
・M(Shift+m):メモリ使用量の高い順にソート
・1(数字の1):CPUコアごとの使用率を個別表示する
・c:プロセスのコマンドライン全体を表示する(引数やパスも見られる)
・k:指定したPIDのプロセスにシグナルを送る(kill)
・u:特定ユーザーのプロセスだけに絞り込む(入力後ユーザー名を打つ)
・d:更新間隔(秒)を変更する
・Space:画面を手動で即時更新する
・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
実務で役立つ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
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"
htopとの比較 ~ より見やすい代替ツール~
htop は、topの機能を強化した対話型プロセスビューアです。標準ではインストールされていませんが、視覚的に分かりやすいため多くの管理者が愛用しています。| 項目 | top | htop |
|---|---|---|
| 標準インストール | あり(全ディストリビューション) | なし(別途インストール) |
| 操作性 | キーボードショートカット中心 | マウス操作対応、カラー表示 |
| CPU表示 | 1キーでコア別切り替え | 常にコア別バーグラフ表示 |
| プロセスツリー | 非対応 | F5キーでツリー表示 |
| スクリプト利用 | -bオプションで対応 | バッチモードなし |
# htopのインストール(RHEL 9 / Rocky Linux / AlmaLinux) # dnf install epel-release -y # dnf install htop -y # htopのインストール(Ubuntu / Debian) # apt install htop -y
topより使いやすい後継ツール(htop / btop)
topは標準で入っている安心感がありますが、現代の運用現場では以下の後継ツールを使うことも増えています。覚えておくと調査が一気に楽になります。・htop:カラー表示、マウス操作、ツリー表示、F2のメニュー設定など視認性が大幅向上。
dnf install htop / apt install htopで導入可能・btop:htopの後継的存在。グラフィカルなCPU/メモリ/ネットワーク/ディスクの統合ダッシュボード。EPELや
snapから導入いずれも操作キー(k / r / P / M)の多くは
topと互換性があるので、topを一通り覚えた後で乗り換えるのがおすすめです。systemd時代のtop代替:systemd-cgtop
cgroups単位でリソース使用量をリアルタイム表示できるのがsystemd-cgtop です。「どのサービス(ユニット)がCPUを食っているか」をサービス単位で見たい時に便利です。# サービス単位でCPU/メモリ使用量をリアルタイム表示 $ systemd-cgtop
topでメモリ使用量順にプロセスを表示する|Shift+M と -o %MEM と free の併用
「サーバーのメモリ使用状況を確認したい」「topコマンドでメモリ順に並び替えたい」というのは、私もアラート対応のたびに繰り返しやる作業です。top 実行中に Shift+M(大文字の M)を押すと、その瞬間からプロセスがメモリ使用量順に並びます。CPU 使用率順に戻したいときは Shift+P(大文字の P)です。
# top を起動してからメモリ順にソートする
$ top
(top の画面で)Shift + M を押す
(CPU順に戻すなら)Shift + P を押す
# 起動時からメモリ順にする(CentOS 7 以降の top に対応)
$ top -o %MEM
# 上位10プロセスだけ表示してファイルに保存する(バッチモード)
$ top -b -n 1 -o %MEM | head -17 > /tmp/top-mem.log
プロセス単位ではなく「サーバー全体としてメモリがどれくらい余っているか」を知りたいときは free コマンドが手早いです。top の上部にも Mem の行は出ますが、free -h の方が単位が読みやすく、available の値で「実際に使える残メモリ」が即わかります。
# 人間が読みやすい単位(MB / GB)で表示する
$ free -h
total used free shared buff/cache available
Mem: 7.7Gi 2.1Gi 1.2Gi 80Mi 4.4Gi 5.3Gi
Swap: 2.0Gi 128Mi 1.9Gi
# 1秒ごとに繰り返し表示する(vmstat と組み合わせる場面も多い)
$ free -h -s 1
top だけで頑張らず、free と vmstat 1 を並行して見るのが実務では一番早いです。available の値が物理メモリの 10% を切り始めたら、対象プロセスを top -o %MEM で特定して対処に入ります。
top でプロセスを PID・ユーザー名で絞り込む|top -p / top -u と監視対象を絞る実務テクニック
「top プロセス 絞り込み」で辿り着く方は、無関係なプロセスが画面いっぱいに流れてきて、追いたい1本が埋もれてしまう状況だと思います。top -p PID なら指定したプロセスだけを連続監視できます。top -u ユーザー名 なら、そのユーザーが起動したプロセスに絞れます。
# PID 1234 だけを連続監視する(複数指定もカンマ区切りで可)
$ top -p 1234
$ top -p 1234,5678,9012
# nginx ユーザーが起動したプロセスだけを表示する
$ top -u nginx
# 起動後に絞り込みたい場合:top の画面で u を押して User name を入力
$ top
(top の画面で)u → nginx と入力 → Enter
プロセス名で先に PID を取得してから top -p に渡す形もよく使います。pgrep と組み合わせると1行で書けます。
# httpd のプロセスだけを top で監視する
$ top -p
# 同じことを2段階で書いた場合
$ pgrep httpd
1234
5678
$ top -p 1234,5678
私もアラート対応で「mysqld の CPU が跳ねている」と言われ、top をそのまま起動して画面全体を眺めて時間を溶かしたことがあります。top -p なら最初から mysqld だけが視界に残るので、判断が早くなります。top -u はマルチテナントサーバーで「特定顧客のプロセス群」を切り出すときにも便利です。
よくあるトラブルと対処法
「htop: command not found」と表示される
htopがインストールされていない状態です。以下のコマンドでインストールしてください。# RHEL 9 / Rocky Linux / AlmaLinux # dnf install epel-release -y && dnf install htop -y # Ubuntu / Debian # apt install htop -y
top コマンドは必ず使えるため、htopがない環境ではまずtopで確認しましょう。topを終了できなくなった
q キーを押すだけで終了できます。もし操作を受け付けない場合は Ctrl+C で強制中断できます。日本語入力モードが有効になっているとキーを認識しないことがあるため、その場合は入力をオフにしてからqを押してください。サーバーが重いのにCPU使用率が高くない
CPU使用率だけで判断しないことが大切です。・
wa(I/O待ち)が高い場合 → ディスクの読み書きが遅延している可能性。iostat -x 1 で確認・スワップのusedが増えている場合 → メモリ不足でスワップアウトが発生している可能性。
free -h で available を確認・ネットワーク遅延が原因の場合 →
ping や ss -tulnp コマンドでネットワーク状態を確認load averageは高いがrunningプロセスが少ない
Tasks行の sleeping 数が多く、running が少ないのにload averageが高い場合は、D状態(ディスクI/O待ち)のプロセスが増えている可能性があります。# D状態(diskwait)のプロセスを確認する # ps aux | awk ' == "D" {print}'
iostat や iotop で原因プロセスを特定してください。本記事のまとめ
| やりたいこと | コマンド / 操作 |
|---|---|
| リアルタイムでプロセスを監視する | top |
| 更新間隔を変更する | top -d 秒数 |
| 指定回数で自動終了する | top -n 回数 |
| 特定プロセスだけ監視する | top -p PID番号 |
| 特定ユーザーのプロセスだけ表示する | top -u ユーザー名 |
| バッチモードでファイルに保存する | top -b -n 1 > ファイル名 |
| CPU使用率順にソートする | top実行中に P キー |
| メモリ使用量順にソートする | top実行中に M キー |
| CPUコアごとの使用率を表示する | top実行中に 1 キー |
| コマンドライン全体を表示する | top実行中に c キー |
| ユーザー絞り込み(起動後) | top実行中に u キー → ユーザー名入力 |
| CPUコア数を確認する | nproc |
| OOM Killerの発動を確認する | grep -i "oom" /var/log/messages |
| メモリの空き(available)を確認する | free -h |
topコマンドでサーバーの負荷状況を正確に読み解けていますか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
次のステップ:Linuxスキルをさらに伸ばすために
リソース監視に慣れてきたら、次はより実践的なLinuxのスキルを学んでみましょう。以下の記事では、現場で必要なテーマを体系的に解説しています。
・psコマンドでプロセスを確認する方法|auxと-efの違いやgrep検索も(プロセス管理)
・crontabコマンドの設定と書き方|動かない時のログ確認まで(シェルスクリプト・定期実行)
・chmodコマンドで権限を変更する方法|755と644の違いや一括変更も(セキュリティ設定)
・grepコマンドで文字列を検索する方法|複数ファイルやディレクトリ除外も(ログ解析・トラブルシュート)
・LinuxのDNS設定方法|resolv.confが元に戻る原因とnmcliの手順(ネットワーク診断)
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方
- 前のページへ:ntpdateでLinuxサーバーの時刻を同期する方法|chronyへの移行とcrontab連携も
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます