サーバー種別と収集方針

Webシステムは一般的に Web サーバー・APL サーバー・DB サーバー の 3 層構成で動作します。各層でボトルネックになるリソースが異なるため、コマンドのオプションや注目すべき指標も変わります。

サーバー 主な役割 最重要リソース
WebWebサーバー HTTP 受付・静的コンテンツ配信・リバースプロキシ CPU(SSL処理・同時接続)
APLAPLサーバー ビジネスロジック処理・DBアクセス CPU・メモリ(GC・ヒープ)
DBDBサーバー データの永続化・クエリ処理 ディスク I/O・メモリ(バッファプール)

収集の基本方針:テスト中は全サーバーで 5 秒間隔・継続収集。負荷が発生している時刻に各サーバーで何が起きていたかを時刻軸で突き合わせるのが目的です(NTP 同期前提)。

mpstat コマンド

mpstat は CPU 使用率をコアごとに詳細に表示します。%idle の低下・%iowait の上昇を監視します。

WebWebサーバー

SSL ターミネーションや大量同時接続による CPU 圧迫を確認します。%usr が継続的に高い場合は CPU バウンドを疑います。

# 全コア・5秒間隔・12回(計1分)
mpstat -P ALL 5 12

# ファイルに保存する場合
mpstat -P ALL 5 12 >> /tmp/mpstat_web.txt
注目ポイント(Webサーバー)
%usr SSL 処理・静的コンテンツ圧縮で上昇。継続的に高い場合は SSL オフロードを検討
%idle 20% 以上を目安に確保。10% 未満が続く場合は要対策

APLAPLサーバー

ビジネスロジックの計算量・スレッド競合による CPU 使用を確認します。コアごとの偏りにも注意が必要です。

# 全コア・5秒間隔・12回
mpstat -P ALL 5 12

# コアごとの偏りを確認したい場合(コア番号を指定)
mpstat -P 0,1,2,3 5 12

# ファイルに保存する場合
mpstat -P ALL 5 12 >> /tmp/mpstat_apl.txt
注目ポイント(APLサーバー)
%usr アプリ処理・GC で上昇。GC ログと照合して原因を切り分ける
%iowait 高い場合は APL ではなく DB の I/O 待ちが原因の可能性大
%idle 20% 以上を目安に確保

DBDBサーバー

クエリ処理・ソート・ハッシュ結合による CPU 使用を確認します。CPU が低くても %iowait が高い場合はディスク I/O がボトルネックです。

# 全コア・5秒間隔・12回
mpstat -P ALL 5 12

# ファイルに保存する場合
mpstat -P ALL 5 12 >> /tmp/mpstat_db.txt
注目ポイント(DBサーバー)
%iowait 最重要。10% 超えたら要注意。フルスキャン・バッファプール不足の疑い
%usr クエリ処理・ソート処理で上昇。スロークエリログと照合
%idle CPU は余っているのに遅い → I/O 待ちまたはロック競合

free コマンド

free はメモリ・スワップの使用状況を表示します。「free」列ではなく「available」列を基準に判断します。

WebWebサーバー

静的ファイルのキャッシュに buff/cache が活用されます。スワップが増加している場合は同時接続数や Worker 数の設定を見直します。

# 1回だけ表示(単位: MB)
free -m

# 5秒間隔で繰り返す場合
while true; do
  echo "=== $(date '+%H:%M:%S') ===" >> /tmp/free_web.txt
  free -m >> /tmp/free_web.txt
  sleep 5
done
注目ポイント(Webサーバー)
available 実質的に使用できる空きメモリ。全体の 20% 以上を目安に確保
Swap used 増加傾向が見られたら Worker プロセス数・接続数の設定を確認

APLAPLサーバー

Java などの JVM 言語では GC が多発するとメモリが一時的に増減します。スワップが発生するとレスポンスタイムが大きく悪化します。

# 1回だけ表示(単位: MB)
free -m

# 5秒間隔で繰り返す場合
while true; do
  echo "=== $(date '+%H:%M:%S') ===" >> /tmp/free_apl.txt
  free -m >> /tmp/free_apl.txt
  sleep 5
done

# JVM ヒープ使用量と合わせて確認(Java アプリの場合)
jstat -gc $(pgrep -f java | head -1) 5000
注目ポイント(APLサーバー)
available テスト進行とともに減少していないか確認。減少が続く場合はメモリリークを疑う
Swap used 最重要。スワップが発生するとレスポンスタイムが大幅悪化。ヒープサイズ設定を見直す

DBDBサーバー

DB サーバーはバッファプール(InnoDB buffer pool / Oracle SGA など)がメモリを大量消費します。バッファプールが縮小されるとディスク I/O が増加します。

# 1回だけ表示(単位: MB)
free -m

# 5秒間隔で繰り返す場合
while true; do
  echo "=== $(date '+%H:%M:%S') ===" >> /tmp/free_db.txt
  free -m >> /tmp/free_db.txt
  sleep 5
done
注目ポイント(DBサーバー)
available バッファプールが十分確保されているか確認。ディスク I/O 増加と合わせて判断
buff/cache DB のバッファプールが大半を占める。この値が突然減少した場合は DB 設定を確認
Swap used スワップ発生は致命的。バッファプールサイズの見直しが必要

iostat コマンド

iostat はディスクデバイスごとの I/O 統計を表示します。%utilawait が主要な監視指標です。

WebWebサーバー

静的コンテンツ配信・ログ書き込みが主な I/O です。通常は I/O 負荷は低めですが、大量ログが発生している場合は確認が必要です。

# 拡張統計・5秒間隔・12回
iostat -xz 5 12

# ファイルに保存する場合
iostat -xz 5 12 >> /tmp/iostat_web.txt
注目ポイント(Webサーバー)
%util 通常は低い(20% 未満)。高い場合はログローテーション設定・出力先を確認
w/s アクセスログの書き込み頻度。非常に高い場合はログバッファリング設定を確認

APLAPLサーバー

アプリログ・一時ファイル書き込みが主な I/O です。%iowait(mpstat)が高くても iostat%util が低い場合は DB 待ちの可能性があります。

# 拡張統計・5秒間隔・12回
iostat -xz 5 12

# デバイス名を指定して確認(例: sda)
iostat -xz -d sda 5 12

# ファイルに保存する場合
iostat -xz 5 12 >> /tmp/iostat_apl.txt
注目ポイント(APLサーバー)
%util 低い(20% 未満)が正常。高い場合は一時ファイル・アプリログ出力量を確認
await 10ms 以内が目安。超える場合はディスク自体の問題を疑う

DBDBサーバー

ディスク I/O が最も重要なのは DB サーバーです。フルスキャン・バッファプール不足・大量書き込みが %utilawait に直結します。

# 拡張統計・5秒間隔・12回
iostat -xz 5 12

# 読み書きの内訳を詳細確認したい場合
iostat -xz -p ALL 5 12

# ファイルに保存する場合
iostat -xz 5 12 >> /tmp/iostat_db.txt
注目ポイント(DBサーバー)
%util 最重要。80% 超で要注意・90% 超は危険。インデックス追加・バッファプール増量を検討
await 最重要。10ms 超で注意・20ms 超は危険。SSD 化・RAID 見直しを検討
rkB/s フルスキャンで急増。スロークエリログと照合してインデックス不足を確認
wkB/s 大量 INSERT/UPDATE・ログフラッシュで増加

vmstat コマンド

vmstat は CPU・メモリ・スワップ・I/O をまとめて確認できるシステム全体の概観コマンドです。最初の 1 行は起動からの累計値のため分析対象外です。

WebWebサーバー

同時接続が増えた際の CPU プロセスキュー(r)と I/O ブロック数(b)を確認します。

# 5秒間隔・12回(2行目以降を分析)
vmstat 5 12

# ファイルに保存する場合
vmstat 5 12 >> /tmp/vmstat_web.txt
注目ポイント(Webサーバー)
r 実行待ちプロセス数。CPU コア数を超え続ける場合は CPU ボトルネック
b I/O 待ちブロック数。通常はほぼ 0。増加する場合はログ書き込みを確認
si / so スワップイン/アウト。0 が正常。継続的に値があればメモリ不足

APLAPLサーバー

スレッドプール枯渇時に r が増加します。GC に伴うメモリ変動も free 列で確認できます。

# 5秒間隔・12回
vmstat 5 12

# メモリ詳細も確認したい場合
vmstat -s

# ファイルに保存する場合
vmstat 5 12 >> /tmp/vmstat_apl.txt
注目ポイント(APLサーバー)
r スレッドプール枯渇・キュー詰まりで増加。スレッド数の設定と合わせて確認
free GC 後に一時増加する。継続的に減少する場合はメモリリークの疑い
si / so スワップが発生するとレスポンス悪化。JVM ヒープサイズを見直す
wa 高い場合は DB の I/O 待ちが APL に影響している可能性

DBDBサーバー

DB サーバーでは b(I/O 待ちブロック)・wa(CPU の I/O 待ち割合)・bi/bo(ブロック読み書き量)を重点的に確認します。

# 5秒間隔・12回
vmstat 5 12

# ディスク統計も同時に確認したい場合
vmstat -d 5 12

# ファイルに保存する場合
vmstat 5 12 >> /tmp/vmstat_db.txt
注目ポイント(DBサーバー)
b 最重要。I/O 待ちブロック数。0 超えが続く場合はディスクが飽和
wa 最重要。20% 超で要注意。iostat の %util・await と合わせて判断
bi ブロック読み込み量。フルスキャン時に急増
bo ブロック書き込み量。大量 INSERT/UPDATE・redo ログ書き込みで増加
si / so スワップが発生するとバッファプールが圧迫。致命的な性能劣化につながる

まとめ:コマンド一覧表

各サーバーで実行するコマンドと最優先の確認指標を一覧にまとめます。

コマンド サーバー コマンド例 最優先指標
mpstat Web mpstat -P ALL 5 12 %usr, %idle
APL mpstat -P ALL 5 12 %usr, %iowait, %idle
DB mpstat -P ALL 5 12 %iowait, %usr, %idle
free Web free -m (ループ収集) available, Swap used
APL free -m (ループ収集) available, Swap used
DB free -m (ループ収集) available, buff/cache, Swap used
iostat Web iostat -xz 5 12 %util, w/s
APL iostat -xz 5 12 %util, await
DB iostat -xz 5 12 %util, await, rkB/s, wkB/s
vmstat Web vmstat 5 12 r, b, si/so
APL vmstat 5 12 r, free, si/so, wa
DB vmstat 5 12 b, wa, bi, bo, si/so