はじめに
Linuxサーバーを運用していると、「CPUが重い」「メモリが足りない」「ディスクが遅い」といった問題に直面することがあります。 そのようなときに活躍するのがシステムリソース監視コマンドです。
この記事では、以下のコマンドの基本的な使い方を学びます。
top— プロセスごとのCPU・メモリ使用率をリアルタイム表示free— メモリ使用量の確認vmstat— CPU・メモリ・I/Oの統計情報iostat— ディスクI/Oの統計情報
1. top コマンド — プロセスのリアルタイム監視
top はシステム全体の状態とプロセスの一覧をリアルタイムで表示するコマンドです。
基本的な起動
top
起動すると、以下のような画面が表示されます。
top - 10:23:45 up 3 days, 2:15, 2 users, load average: 0.52, 0.48, 0.45
Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 1.0 sy, 0.0 ni, 95.5 id, 0.2 wa, 0.0 hi, 0.1 si
MiB Mem : 7952.3 total, 3241.8 free, 2810.4 used, 1900.1 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4840.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 www-data 20 0 512000 64000 12000 S 5.3 0.8 1:23.45 nginx
567 mysql 20 0 1024000 256000 32000 S 2.1 3.1 5:10.23 mysqld
ヘッダー行の読み方
| 項目 | 意味 |
|---|---|
load average: 0.52, 0.48, 0.45 | 過去1分・5分・15分の平均負荷 |
%Cpu(s): 3.2 us | ユーザープロセスによるCPU使用率 |
%Cpu(s): 0.2 wa | I/O待ち時間の割合(高いとディスクが遅い) |
MiB Mem: 7952.3 total | 物理メモリの合計 |
buff/cache | バッファ・キャッシュとして使用中のメモリ |
top の便利なキー操作
| キー | 動作 |
|---|---|
q | 終了 |
k | プロセスをKillする(PIDを入力) |
M | メモリ使用率でソート |
P | CPU使用率でソート(デフォルト) |
1 | CPUコアごとの使用率を表示 |
h | ヘルプを表示 |
非対話モードで1回だけ取得する
# 1回だけスナップショットを取得する(スクリプトに便利)
top -bn1
2. free コマンド — メモリ使用量の確認
free はメモリの使用状況を表示します。
基本的な使い方
# MB単位で表示
free -m
# GB単位で表示
free -h
total used free shared buff/cache available
Mem: 7952 2810 3241 128 1900 4840
Swap: 2048 0 2048
各列の意味
| 列 | 意味 |
|---|---|
total | 物理メモリの合計 |
used | 使用中のメモリ |
free | 未使用のメモリ |
buff/cache | バッファ・キャッシュ(OSが利用効率化のため使用) |
available | 実際に新プロセスが使えるメモリ(最重要) |
ポイント:
freeの値が小さくても、availableが大きければメモリに余裕があります。buff/cacheはプロセスが必要とすれば自動的に解放されます。
定期的に表示する
# 2秒ごとに更新して表示
free -h -s 2
3. vmstat コマンド — システム全体の統計
vmstat はCPU、メモリ、I/O、スワップの統計情報をまとめて表示します。
基本的な使い方
# 1秒ごとに5回表示
vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 3241800 210000 1690100 0 0 5 20 300 500 3 1 95 1 0
0 0 0 3241200 210000 1690100 0 0 0 12 280 480 2 1 97 0 0
主な列の意味
| 列 | 意味 |
|---|---|
r | 実行待ちプロセス数(CPUコア数より多いと過負荷) |
b | I/O待ちでブロックされているプロセス数 |
si / so | スワップイン・アウト(0以外ならメモリ不足) |
bi / bo | ディスク読み書き(blocks/s) |
us | ユーザー空間のCPU使用率 |
sy | カーネル空間のCPU使用率 |
id | アイドル率 |
wa | I/O待ち率(高いとディスクがボトルネック) |
4. iostat コマンド — ディスクI/Oの詳細
iostat はディスクデバイスごとのI/O統計を表示します。sysstat パッケージに含まれています。
インストール(未インストールの場合)
# Debian/Ubuntu
sudo apt install sysstat
# RHEL/CentOS
sudo yum install sysstat
基本的な使い方
# 2秒ごとに3回表示(-x で詳細情報)
iostat -x 2 3
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %util
sda 5.00 20.00 200.00 800.00 0.00 5.00 12.50
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
重要な列
| 列 | 意味 |
|---|---|
r/s / w/s | 毎秒の読み書きリクエスト数 |
rkB/s / wkB/s | 毎秒の読み書きデータ量(KB) |
%util | デバイスの使用率(100%に近いとボトルネック) |
5. 実践的な監視フロー
システムが重いときは以下の順番で確認します。
# Step 1: まず全体像をつかむ
top
# Step 2: メモリが問題か確認
free -h
# Step 3: スワップやI/Oが問題か確認
vmstat 1 5
# Step 4: ディスクI/Oが問題ならデバイス別に確認
iostat -x 1 5
ワンライナーでログに記録する
# 5秒ごとにメモリ状況をログファイルに追記
while true; do
echo "=== $(date) ===" >> /tmp/memory.log
free -m >> /tmp/memory.log
sleep 5
done
練習問題
問題1
top コマンドを起動し、メモリ使用率の高い順にプロセスを並べ替えるには何キーを押せばよいですか?
問題2
free -h の出力で、実際に新しいプロセスが利用できるメモリを示す列はどれですか?
問題3
vmstat 2 4 というコマンドは何を意味しますか?
問題4
iostat -x の出力で、ディスクデバイスの混雑度を示す列はどれですか?その値が何%に近づくとボトルネックになりますか?
答え
問題1の答え
M キーを押すと、メモリ使用率(%MEM)の高い順にソートされます。
問題2の答え
available 列です。free 列はキャッシュ等を含まない純粋な未使用メモリですが、available は buff/cache から解放できる領域も含むため、実際に使えるメモリ量を正確に示します。
問題3の答え 2秒間隔で4回、システムの統計情報(CPU・メモリ・I/O・スワップ)を表示します。最初の行はシステム起動からの累積値なので、通常は2行目以降を参照します。
問題4の答え
%util 列です。この値が 100% に近づくとそのデバイスがボトルネックになっています。一般的に80%を超えると注意が必要です。