Linuxサーバーを安定して運用するためには、システムリソースの状態を常に把握することが不可欠です。メモリ不足、CPU過負荷、ディスク容量の枯渇、I/Oボトルネックなど、これらの問題を早期に発見できれば、サービス停止を未然に防げます。

この記事では、メモリ、CPU、ディスク、I/Oの各リソースを監視するためのコマンドと、それらを統合的に確認できる総合監視ツールについて詳しく解説します。

前提条件

この記事では以下の環境での動作を確認しています。

項目 バージョン
OS Ubuntu 24.04 LTS / AlmaLinux 9
procps-ng 4.0以上
sysstat 12.0以上

iostatコマンドを使用するには、sysstatパッケージのインストールが必要です。

1
2
3
4
5
# Ubuntu/Debian系
sudo apt install sysstat

# RHEL/AlmaLinux/Rocky系
sudo dnf install sysstat

システムリソース監視の全体像

Linuxシステムでは、主に4つのリソースを監視することが重要です。

graph TB
    A[システムリソース監視] --> B[メモリ]
    A --> C[CPU]
    A --> D[ディスク]
    A --> E[I/O]
    
    B --> B1[free]
    B --> B2[/proc/meminfo]
    
    C --> C1[uptime]
    C --> C2[vmstat]
    C --> C3[mpstat]
    
    D --> D1[df]
    D --> D2[du]
    
    E --> E1[iostat]
    E --> E2[iotop]
    
    style A fill:#e3f2fd,stroke:#1976d2
    style B fill:#fff3e0,stroke:#f57c00
    style C fill:#e8f5e9,stroke:#388e3c
    style D fill:#fce4ec,stroke:#c2185b
    style E fill:#f3e5f5,stroke:#7b1fa2

これらの個別コマンドに加え、htopglancesなどの総合監視ツールを使えば、すべてのリソースを一画面で確認できます。

メモリ使用状況の確認(free)

freeコマンドの基本

freeコマンドは、システムのメモリ使用状況を簡潔に表示します。

1
free -h

実行結果の例:

               total        used        free      shared  buff/cache   available
Mem:            15Gi       4.2Gi       8.1Gi       312Mi       3.1Gi        10Gi
Swap:          2.0Gi          0B       2.0Gi

各列の意味

列名 説明
total システムに搭載されている物理メモリの総量
used 使用中のメモリ(total - free - buffers - cache)
free 完全に未使用のメモリ
shared tmpfsなどで使用される共有メモリ
buff/cache バッファとキャッシュに使用されているメモリ
available 新しいアプリケーションが利用可能なメモリの推定値

重要なのはfreeではなくavailableを確認することです。Linuxはメモリ効率を高めるため、空きメモリをバッファやキャッシュに積極的に割り当てます。これらは必要に応じて解放されるため、availableが実際に利用可能なメモリを示します。

よく使うオプション

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 人間が読みやすい形式で表示
free -h

# メガバイト単位で表示
free -m

# ギガバイト単位で表示
free -g

# 2秒ごとに継続表示(5回)
free -h -s 2 -c 5

# 1行で表示(スクリプト用)
free -h --line

メモリ使用状況の判断基準

1
2
# available列の値を確認
free -h | awk '/^Mem:/ {print "Available: " $7}'

メモリに関する監視のポイントは以下のとおりです。

  • availableが総メモリの10%を下回ったら要注意
  • Swap使用量が増加している場合、物理メモリが不足している可能性あり
  • buff/cacheが大きくても、availableが十分なら問題なし

/proc/meminfoによる詳細確認

より詳細なメモリ情報が必要な場合は、/proc/meminfoを直接参照します。

1
2
# 主要な情報を抽出
grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree):' /proc/meminfo

実行結果の例:

MemTotal:       16384000 kB
MemFree:         8500000 kB
MemAvailable:   10800000 kB
Buffers:          512000 kB
Cached:          2800000 kB
SwapTotal:       2097152 kB
SwapFree:        2097152 kB

CPU負荷の確認(uptime、vmstat)

uptimeコマンド

uptimeは、システムの稼働時間とロードアベレージを表示します。

1
uptime

実行結果の例:

 14:32:45 up 15 days,  3:24,  2 users,  load average: 0.52, 0.78, 0.65

ロードアベレージの読み方

ロードアベレージは、過去1分、5分、15分の平均負荷を示します。

意味
1.00 1コアCPUが100%使用されている状態
2.00 2コア分のCPUが100%使用されている状態

判断の目安として、ロードアベレージがCPUコア数以下であれば正常です。

1
2
3
4
5
# CPUコア数を確認
nproc

# または詳細情報を表示
lscpu | grep "^CPU(s):"

4コアのサーバーであれば、ロードアベレージが4.0以下なら問題ありません。4.0を超える状態が継続する場合は、CPUがボトルネックになっている可能性があります。

vmstatによる詳細なCPU/メモリ監視

vmstatは、CPU、メモリ、I/O、スワップの状況を一括で表示する強力なコマンドです。

1
2
# 2秒間隔で5回表示
vmstat 2 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 8500124 512048 2800256    0    0    12    28  156  312  3  1 95  1  0
 0  0      0 8499896 512048 2800260    0    0     0    16  142  298  2  1 97  0  0
 2  0      0 8499640 512052 2800264    0    0     0    24  168  324  4  2 94  0  0
 0  0      0 8499512 512052 2800268    0    0     0     8  138  286  1  1 98  0  0
 1  0      0 8499384 512056 2800272    0    0     0    20  152  308  3  1 96  0  0

vmstatの各列の意味

procsセクション

説明
r 実行待ちのプロセス数(CPU待ち)
b ブロック状態のプロセス数(I/O待ち)

memoryセクション

説明
swpd 使用中のスワップ容量(KB)
free 空きメモリ(KB)
buff バッファに使用されているメモリ(KB)
cache キャッシュに使用されているメモリ(KB)

swapセクション

説明
si ディスクからスワップインされた容量(KB/秒)
so ディスクへスワップアウトされた容量(KB/秒)

ioセクション

説明
bi ブロックデバイスから読み込んだブロック数(KB/秒)
bo ブロックデバイスへ書き込んだブロック数(KB/秒)

cpuセクション

説明
us ユーザープロセスのCPU使用率(%)
sy システム(カーネル)のCPU使用率(%)
id アイドル状態の割合(%)
wa I/O待ちの割合(%)
st 仮想マシンから奪われた時間(%)

vmstatで注目すべきポイント

graph LR
    A[vmstat分析] --> B{r列が高い?}
    B -->|Yes| C[CPU不足の可能性]
    B -->|No| D{b列が高い?}
    D -->|Yes| E[I/Oボトルネック]
    D -->|No| F{si/soが発生?}
    F -->|Yes| G[メモリ不足]
    F -->|No| H[正常]
    
    style C fill:#ffcdd2,stroke:#c62828
    style E fill:#ffcdd2,stroke:#c62828
    style G fill:#ffcdd2,stroke:#c62828
    style H fill:#c8e6c9,stroke:#388e3c

監視のポイントは以下のとおりです。

  • r列がCPUコア数を常に上回る場合、CPU不足
  • b列が常に高い場合、I/Oがボトルネック
  • si/soが頻繁に発生する場合、メモリ不足でスワップが発生
  • waが高い場合、ディスクI/Oがボトルネック

vmstatの便利なオプション

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# タイムスタンプを付けて表示
vmstat -t 2 5

# ワイド表示(メモリが多いシステム向け)
vmstat -w 2 5

# ディスク統計を表示
vmstat -d

# 起動時からの統計を省略
vmstat -y 2 5

ディスク使用量の確認(df、du)

dfコマンドでファイルシステムの使用状況を確認

dfコマンドは、マウントされているファイルシステムの使用状況を表示します。

1
df -h

実行結果の例:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   45G   50G  48% /
/dev/sda2       500G  280G  195G  59% /data
tmpfs            16G  312M   16G   2% /dev/shm

dfの主要オプション

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 人間が読みやすい形式
df -h

# ファイルシステムの種類も表示
df -hT

# 特定のファイルシステムタイプのみ表示
df -h -t ext4

# 特定のファイルシステムタイプを除外
df -h -x tmpfs -x devtmpfs

# inode使用状況を表示
df -i

# 合計を表示
df -h --total

inode枯渇の確認

ディスク容量に余裕があっても、inodeが枯渇するとファイルを作成できなくなります。

1
df -i | awk 'NR==1 || $5+0 > 80 {print}'

このコマンドは、inode使用率が80%を超えるファイルシステムを表示します。

duコマンドでディレクトリサイズを確認

duコマンドは、ディレクトリやファイルのディスク使用量を確認します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# カレントディレクトリの合計サイズ
du -sh .

# 各サブディレクトリのサイズを表示
du -sh */

# 深さ1階層までのサイズを表示
du -h --max-depth=1

# 大きい順にソートして上位10件を表示
du -h --max-depth=1 | sort -hr | head -10

実行結果の例:

4.5G    ./logs
2.1G    ./backups
1.2G    ./data
512M    ./cache
128M    ./tmp

容量を圧迫しているディレクトリの特定

ディスク容量が不足している場合、以下の手順で原因を特定します。

1
2
3
4
5
6
7
8
# ルートから大きいディレクトリを探索
sudo du -h --max-depth=1 / 2>/dev/null | sort -hr | head -10

# 特定のディレクトリ配下を詳細に調査
sudo du -h --max-depth=2 /var | sort -hr | head -20

# 巨大なファイルを直接検索
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -hr | head -10

ディスク監視の実践的なスクリプト

以下は、ディスク使用率が閾値を超えた場合に警告を出すスクリプトの例です。

1
2
3
4
5
6
7
8
#!/bin/bash
THRESHOLD=80

df -h | awk -v threshold="$THRESHOLD" '
NR>1 && $5+0 >= threshold {
    printf "WARNING: %s is %s full (Mounted on %s)\n", $1, $5, $6
}
'

I/O監視(iostat)

iostatの基本

iostatは、CPU統計とデバイスI/O統計を表示します。sysstatパッケージに含まれています。

1
2
3
4
5
# 基本的な使い方
iostat

# 人間が読みやすい形式で2秒間隔、5回表示
iostat -h 2 5

実行結果の例:

Linux 6.5.0-44-generic (server01)     01/07/2026     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.24    0.01    1.12    0.85    0.00   94.78

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda              25.34        42.18       128.45         0.00   54892156  167234892          0
sdb              12.67        18.92        64.23         0.00   24621456   83612456          0

拡張統計の表示

詳細なI/O統計を確認するには-xオプションを使用します。

1
iostat -xh 2 5

実行結果の例:

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
sda             12.45     42.18     0.82   6.18    1.24    3.39   15.67    128.45     8.92  36.26    2.15    8.20    0.00      0.00     0.00   0.00    0.00     0.00    0.12    0.85    0.04   2.85

iostatの重要な指標

指標 説明 警告レベルの目安
%util デバイスのビジー率 80%以上で注意
await I/Oリクエストの平均待ち時間(ms) 10ms以上で注意(SSD)、50ms以上で注意(HDD)
r_await / w_await 読み取り/書き込みの平均待ち時間 awaitと同様
aqu-sz 平均キュー長 継続的に高い場合は問題
tps 1秒あたりのI/O転送数 デバイスの限界に近いと問題

iostatの便利なオプション

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# デバイス統計のみ表示
iostat -d 2 5

# CPU統計のみ表示
iostat -c 2 5

# 特定のデバイスのみ表示
iostat -h sda 2 5

# パーティション情報も表示
iostat -p sda 2 5

# 最初のブート時からの統計を省略
iostat -y 2 5

# JSON形式で出力
iostat -o JSON 2 1

I/Oボトルネックの判断

graph TD
    A[iostat分析] --> B{%util > 80%?}
    B -->|Yes| C{await > 閾値?}
    B -->|No| D[I/Oは正常]
    C -->|Yes| E[深刻なI/Oボトルネック]
    C -->|No| F[負荷は高いが許容範囲]
    
    E --> G[対策を検討]
    G --> G1[ディスクのアップグレード]
    G --> G2[RAIDの見直し]
    G --> G3[I/O負荷の分散]
    G --> G4[キャッシュの活用]
    
    style E fill:#ffcdd2,stroke:#c62828
    style D fill:#c8e6c9,stroke:#388e3c
    style F fill:#fff3e0,stroke:#f57c00

総合監視ツール(htop、glances)

htopによるインタラクティブな監視

htopは、topコマンドを改良したインタラクティブなプロセスビューアです。

1
2
3
4
5
6
# インストール
# Ubuntu/Debian系
sudo apt install htop

# RHEL/AlmaLinux/Rocky系
sudo dnf install htop
1
2
# 起動
htop

htopの画面構成は以下のとおりです。

  0[||||                           12.5%]   Tasks: 142, 412 thr; 2 running
  1[||                              6.2%]   Load average: 0.52 0.78 0.65
  2[|||||                          18.7%]   Uptime: 15 days, 03:24:18
  3[|||                             9.4%]
  Mem[|||||||||||||||         4.2G/15.6G]
  Swp[                              0K/2G]

    PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
   1234 www-data   20   0  512M  128M  24M S  8.2  0.8  12:34.56 nginx: worker process
   2345 mysql      20   0 1.2G   800M  12M S  5.4  5.1  45:12.34 /usr/sbin/mysqld
   3456 root       20   0  256M   64M  32M S  2.1  0.4   3:21.09 /usr/bin/python3 app.py

htopの主要な操作

キー 機能
F1 または h ヘルプ表示
F2 または S 設定画面
F3 または / プロセス検索
F4 または \ フィルター
F5 または t ツリー表示切替
F6 または > ソート列変更
F9 または k プロセス終了
F10 または q 終了
Space プロセスをマーク
U ユーザーでフィルター
M メモリ使用量でソート
P CPU使用量でソート
T 実行時間でソート

htopのコマンドラインオプション

1
2
3
4
5
6
7
8
# 特定ユーザーのプロセスのみ表示
htop -u www-data

# ツリー表示で起動
htop -t

# 特定のPIDをハイライト
htop -p 1234,2345,3456

glancesによる包括的な監視

glancesは、システム全体の状態を一画面で把握できる高機能な監視ツールです。

1
2
3
4
5
6
7
8
9
# インストール
# Ubuntu/Debian系
sudo apt install glances

# RHEL/AlmaLinux/Rocky系
sudo dnf install glances

# pipでインストール(最新版)
pip install glances
1
2
# 起動
glances

glancesは以下の情報を一画面に表示します。

  • CPU使用率(コアごと)
  • メモリ/スワップ使用状況
  • ディスクI/O
  • ネットワークI/O
  • ファイルシステム使用率
  • プロセスリスト
  • センサー情報(温度など)
  • Docker/Podmanコンテナ情報

glancesの特徴的な機能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Webサーバーモードで起動(ブラウザでアクセス可能)
glances -w

# クライアント/サーバーモード(リモート監視)
# サーバー側
glances -s

# クライアント側
glances -c <サーバーのIPアドレス>

# CSV形式でエクスポート
glances --export csv --export-csv-file /tmp/glances.csv

glancesの主要な操作

キー 機能
h ヘルプ表示
q または Esc 終了
1 CPUをコアごとに表示
2 ディスクI/O表示切替
3 ネットワークI/O表示切替
d ディスクI/O統計の表示/非表示
f ファイルシステムの表示/非表示
n ネットワーク統計の表示/非表示
s センサー情報の表示/非表示
b 転送速度をビット/バイトで切替
z プロセスリストの表示/非表示

htopとglancesの使い分け

観点 htop glances
主な用途 プロセス管理・調査 システム全体の監視
CPU情報 コアごとのバー表示 コアごと + 履歴
メモリ情報 シンプル 詳細(バッファ/キャッシュ分離)
ディスクI/O なし あり
ネットワークI/O なし あり
プロセス操作 充実(kill, nice, etc.) 基本的な表示のみ
リモート監視 なし あり(クライアント/サーバー)
Webインターフェース なし あり

プロセスを詳しく調べたい場合はhtop、システム全体の健全性を俯瞰したい場合はglancesが適しています。

監視コマンドの使い分けまとめ

graph TD
    A[何を確認したい?] --> B{メモリ?}
    B -->|Yes| B1[free -h]
    B -->|No| C{CPU負荷?}
    C -->|Yes| C1[uptime / vmstat]
    C -->|No| D{ディスク容量?}
    D -->|Yes| D1[df -h / du -sh]
    D -->|No| E{I/O?}
    E -->|Yes| E1[iostat -xh]
    E -->|No| F{総合的に?}
    F -->|Yes| F1[htop / glances]
    
    style B1 fill:#fff3e0,stroke:#f57c00
    style C1 fill:#e8f5e9,stroke:#388e3c
    style D1 fill:#fce4ec,stroke:#c2185b
    style E1 fill:#f3e5f5,stroke:#7b1fa2
    style F1 fill:#e3f2fd,stroke:#1976d2
目的 推奨コマンド
メモリ使用状況の確認 free -h
詳細なメモリ情報 cat /proc/meminfo
システム負荷の概要 uptime
CPU/メモリ/スワップの継続監視 vmstat 2
ファイルシステムの使用状況 df -hT
ディレクトリサイズの確認 du -sh *
ディスクI/Oの監視 iostat -xh 2
プロセスの詳細調査 htop
システム全体の監視 glances

よくあるトラブルと対処法

メモリ不足の兆候と対策

症状:

  • free -havailableが極端に少ない
  • vmstatsi/soが継続的に発生
  • システムの応答が遅くなる

対策:

1
2
3
4
5
# メモリを多く使用しているプロセスを特定
ps aux --sort=-%mem | head -10

# キャッシュを解放(一時的な対処)
sudo sync && sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

CPU過負荷の兆候と対策

症状:

  • uptimeのロードアベレージがコア数を大幅に超える
  • vmstatr列がコア数を常に超える

対策:

1
2
3
4
5
# CPU使用率の高いプロセスを特定
ps aux --sort=-%cpu | head -10

# リアルタイムで確認
htop

ディスク容量不足の対策

1
2
3
4
5
6
7
8
# 大きなファイルを特定
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -hr

# 古いログファイルを圧縮
sudo find /var/log -name "*.log" -mtime +7 -exec gzip {} \;

# パッケージキャッシュの削除(Ubuntu)
sudo apt clean

I/Oボトルネックの対策

症状:

  • iostat%utilが常に高い
  • awaitが高い値を示す
  • vmstatb列が高い

対策:

1
2
3
4
5
# I/O負荷の高いプロセスを特定
sudo iotop -o

# ディスクのスループットを確認
sudo hdparm -tT /dev/sda

まとめ

Linuxシステムリソースの監視は、安定したサーバー運用の基盤です。この記事で紹介したコマンドを使いこなすことで、以下のことが可能になります。

  • freeコマンドでメモリ使用状況を把握し、メモリ不足を早期発見
  • uptimevmstatでCPU負荷を監視し、ボトルネックを特定
  • dfduでディスク使用量を管理し、容量枯渇を防止
  • iostatでI/O性能を監視し、ディスクボトルネックを検出
  • htopglancesで総合的にシステムを監視

これらのコマンドを日常的に活用し、問題が深刻化する前に対処できるスキルを身につけましょう。

参考リンク