system-admin 初級

システムリソース監視コマンド入門

top、free、vmstat、iostatなどのコマンドを使ってLinuxシステムのCPU・メモリ・ディスクI/Oをリアルタイムに監視する方法を学びます。

はじめに

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 waI/O待ち時間の割合(高いとディスクが遅い)
MiB Mem: 7952.3 total物理メモリの合計
buff/cacheバッファ・キャッシュとして使用中のメモリ

top の便利なキー操作

キー動作
q終了
kプロセスをKillする(PIDを入力)
Mメモリ使用率でソート
PCPU使用率でソート(デフォルト)
1CPUコアごとの使用率を表示
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コア数より多いと過負荷)
bI/O待ちでブロックされているプロセス数
si / soスワップイン・アウト(0以外ならメモリ不足)
bi / boディスク読み書き(blocks/s)
usユーザー空間のCPU使用率
syカーネル空間のCPU使用率
idアイドル率
waI/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 列はキャッシュ等を含まない純粋な未使用メモリですが、availablebuff/cache から解放できる領域も含むため、実際に使えるメモリ量を正確に示します。

問題3の答え 2秒間隔で4回、システムの統計情報(CPU・メモリ・I/O・スワップ)を表示します。最初の行はシステム起動からの累積値なので、通常は2行目以降を参照します。

問題4の答え %util 列です。この値が 100% に近づくとそのデバイスがボトルネックになっています。一般的に80%を超えると注意が必要です。