LinuxでCPU使用率やメモリ使用量、実行中のプロセスをリアルタイムで確認したいときは、topコマンドを使用します。
前回解説したvmstatコマンドでは、メモリ、スワップ、CPU、I/Oの全体的な動きを確認できました。
ただし、vmstatだけでは「どのプロセスがCPUを使っているのか」「どのプロセスがメモリを大量に使っているのか」までは分かりにくいです。
そのようなときに便利なのがtopコマンドです。
topを使うと、システム全体のCPU・メモリ状況に加えて、プロセスごとの使用率をリアルタイムで確認できます。
この記事では、Linux初心者でも実際に使えるように、topコマンドの基本画面、ロードアベレージ、CPU・メモリ欄、プロセス一覧の見方、並び替え、検索、プロセス終了、free・vmstat・psとの違いまで実例付きで解説します。
- topコマンドとは
- topコマンドの基本構文
- top画面の全体構成
- 1行目の見方
- ロードアベレージとは
- Tasks行の見方
- CPU行の見方
- CPU使用率を見るポイント
- waが高い場合の見方
- メモリ行の見方
- Swap行の見方
- プロセス一覧の見方
- %CPU列の見方
- %MEM列の見方
- VIRT・RES・SHRの違い
- プロセス状態S列の見方
- topを終了する方法
- CPU使用率順に並び替える方法
- メモリ使用率順に並び替える方法
- 累積CPU時間順に並び替える方法
- 表示間隔を変更する方法
- 特定ユーザーのプロセスだけ表示する方法
- 特定PIDだけ表示する方法
- 特定プロセスを終了する方法
- nice値を変更する方法
- コマンドライン全体を表示する方法
- CPUコアごとの使用率を表示する方法
- スレッド単位で表示する方法
- 表示回数を指定する方法
- バッチモードで出力する方法
- 更新間隔と回数を組み合わせる方法
- 並び替え列を指定して起動する方法
- topコマンドの主なオプション
- top実行中によく使うキー
- topとfreeコマンドの違い
- topとvmstatコマンドの違い
- topとpsコマンドの違い
- topとhtopの違い
- サーバーが重いときのtop確認手順
- CPU負荷が高いときの見方
- メモリ不足が疑われるときの見方
- I/O待ちが疑われるときの見方
- topコマンドでよく使う実用例
- topコマンドでよくある注意点
- topコマンドでよくあるエラー・疑問
- よくある質問
- まとめ
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に使われた割合 |
初心者はまずus、sy、id、waを確認しましょう。
CPU使用率を見るポイント
usやsyが高く、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待ちが疑われます。
詳しく確認する場合は、vmstatやiostatを使います。
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 -hのavailableを確認しましょう。
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 |
他プロセスと共有可能なメモリ量 | 共有ライブラリなどを含む |
メモリ使用量を見るときは、まず%MEMとRESを重視すると分かりやすいです。
プロセス状態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コマンドの違い
freeとtopは、どちらもメモリ確認で使いますが、用途が違います。
| コマンド | 主な用途 |
|---|---|
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欄を確認する
us、sy、id、waを見ます。
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が多い - 特定プロセスの
%MEMやRESが大きい - サーバーが重く、スワップ利用が増えている
メモリ使用率順に並び替えます。
Shift + M
さらにfree -hやvmstat 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待ちの可能性があります。
iostatやvmstatで追加確認します。
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不足と断定せずwaやvmstatも確認しましょう。
%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を見るときは、ロードアベレージ、us・sy・id・wa、%CPU、%MEM、RESを確認しましょう。
CPU負荷が高い原因を探すなら%CPU、メモリ不足を調べるなら%MEMとRES、I/O待ちを疑うならwaを確認します。
必要に応じて、free、vmstat、iostat、psと組み合わせましょう。
free -h
vmstat 1
iostat -x 1
ps aux --sort=-%mem | head
topは、Linuxサーバーが重い原因を探すための基本コマンドです。まずはtopを起動し、Shift + PとShift + MでCPU・メモリ使用率の高いプロセスを確認できるようになりましょう。




コメント