Linuxサーバーを安定して運用するためには、システムリソースの状態を常に把握することが不可欠です。メモリ不足、CPU過負荷、ディスク容量の枯渇、I/Oボトルネックなど、これらの問題を早期に発見できれば、サービス停止を未然に防げます。
この記事では、メモリ、CPU、ディスク、I/Oの各リソースを監視するためのコマンドと、それらを統合的に確認できる総合監視ツールについて詳しく解説します。
前提条件
この記事では以下の環境での動作を確認しています。
| 項目 | バージョン |
|---|---|
| OS | Ubuntu 24.04 LTS / AlmaLinux 9 |
| procps-ng | 4.0以上 |
| sysstat | 12.0以上 |
iostatコマンドを使用するには、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これらの個別コマンドに加え、htopやglancesなどの総合監視ツールを使えば、すべてのリソースを一画面で確認できます。
メモリ使用状況の確認(free)
freeコマンドの基本
freeコマンドは、システムのメモリ使用状況を簡潔に表示します。
|
|
実行結果の例:
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が実際に利用可能なメモリを示します。
よく使うオプション
|
|
メモリ使用状況の判断基準
|
|
メモリに関する監視のポイントは以下のとおりです。
availableが総メモリの10%を下回ったら要注意- Swap使用量が増加している場合、物理メモリが不足している可能性あり
buff/cacheが大きくても、availableが十分なら問題なし
/proc/meminfoによる詳細確認
より詳細なメモリ情報が必要な場合は、/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は、システムの稼働時間とロードアベレージを表示します。
|
|
実行結果の例:
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コア数以下であれば正常です。
|
|
4コアのサーバーであれば、ロードアベレージが4.0以下なら問題ありません。4.0を超える状態が継続する場合は、CPUがボトルネックになっている可能性があります。
vmstatによる詳細なCPU/メモリ監視
vmstatは、CPU、メモリ、I/O、スワップの状況を一括で表示する強力なコマンドです。
|
|
実行結果の例:
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の便利なオプション
|
|
ディスク使用量の確認(df、du)
dfコマンドでファイルシステムの使用状況を確認
dfコマンドは、マウントされているファイルシステムの使用状況を表示します。
|
|
実行結果の例:
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の主要オプション
|
|
inode枯渇の確認
ディスク容量に余裕があっても、inodeが枯渇するとファイルを作成できなくなります。
|
|
このコマンドは、inode使用率が80%を超えるファイルシステムを表示します。
duコマンドでディレクトリサイズを確認
duコマンドは、ディレクトリやファイルのディスク使用量を確認します。
|
|
実行結果の例:
4.5G ./logs
2.1G ./backups
1.2G ./data
512M ./cache
128M ./tmp
容量を圧迫しているディレクトリの特定
ディスク容量が不足している場合、以下の手順で原因を特定します。
|
|
ディスク監視の実践的なスクリプト
以下は、ディスク使用率が閾値を超えた場合に警告を出すスクリプトの例です。
|
|
I/O監視(iostat)
iostatの基本
iostatは、CPU統計とデバイスI/O統計を表示します。sysstatパッケージに含まれています。
|
|
実行結果の例:
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オプションを使用します。
|
|
実行結果の例:
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の便利なオプション
|
|
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コマンドを改良したインタラクティブなプロセスビューアです。
|
|
|
|
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のコマンドラインオプション
|
|
glancesによる包括的な監視
glancesは、システム全体の状態を一画面で把握できる高機能な監視ツールです。
|
|
|
|
glancesは以下の情報を一画面に表示します。
- CPU使用率(コアごと)
- メモリ/スワップ使用状況
- ディスクI/O
- ネットワークI/O
- ファイルシステム使用率
- プロセスリスト
- センサー情報(温度など)
- Docker/Podmanコンテナ情報
glancesの特徴的な機能
|
|
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 -hでavailableが極端に少ないvmstatでsi/soが継続的に発生- システムの応答が遅くなる
対策:
|
|
CPU過負荷の兆候と対策
症状:
uptimeのロードアベレージがコア数を大幅に超えるvmstatのr列がコア数を常に超える
対策:
|
|
ディスク容量不足の対策
|
|
I/Oボトルネックの対策
症状:
iostatで%utilが常に高いawaitが高い値を示すvmstatのb列が高い
対策:
|
|
まとめ
Linuxシステムリソースの監視は、安定したサーバー運用の基盤です。この記事で紹介したコマンドを使いこなすことで、以下のことが可能になります。
freeコマンドでメモリ使用状況を把握し、メモリ不足を早期発見uptimeとvmstatでCPU負荷を監視し、ボトルネックを特定dfとduでディスク使用量を管理し、容量枯渇を防止iostatでI/O性能を監視し、ディスクボトルネックを検出htopやglancesで総合的にシステムを監視
これらのコマンドを日常的に活用し、問題が深刻化する前に対処できるスキルを身につけましょう。