Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

夜間保守のバディ 第21話 swapの嵐

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!
AI連載小説

夜間バッチの途中でサーバ全体が重くなった。CPUよりもI/O waitが高い。律は `vmstat 1` を見て言った。

「swapしてます」

メモリを使い切ったプロセスが、ディスクを巻き込んで全体を遅くしていた。瀬名は対象バッチの並列数を落とし、律は一時的に処理を分割した。

翌日、メモリ使用量の見積もりと並列数の上限を設定した。

「速くしようとして、全部遅くする」

瀬名が苦笑すると、律は言った。

「焦って近づきすぎると、処理落ちしますね」

「それ、何の話ですか」

「サーバの話です」

三度目の返しに、瀬名はもう笑うしかなかった。


人物紹介
瀬名悠真

  • 男性、30代
  • サーバ運用・インフラ担当
  • 手は動くが、初動で少し焦りやすい

久坂律

  • 女性、30代
  • 監視、自動化、ログ解析、運用設計に強い
  • 冷静で、原因調査の順序を大事にする

 

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

用語メモ

vmstat 1 は、Linux/UNIX環境において「システムのCPU、メモリ、IOなどの負荷状況を『1秒おき』にリアルタイム更新しながら監視するコマンド」です。

サーバーの動作が重い時や、システムに負荷をかけてパフォーマンスを計測したい時に、真っ先に使われる超定番コマンドです!

🔍 コマンドの分解

  • vmstat(Virtual Memory Statistics)

    メモリやCPU、ディスクIO、プロセスなどのシステム全体の統計情報を出力するコマンドです。

  • 1(更新間隔)

    出力結果を「1秒ごと」に繰り返し表示する指定です(vmstat 2 にすれば2秒ごとになります)。

    Ctrl + C を押すまで永続的に出力され続けます。

📊 出力結果の見方と各項目の解説

コマンドを実行すると、以下のような表形式でデータが1秒ごとに流れてきます。

Plaintext

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1024500 120400 850300    0    0     4    12  150  300  5  2 93  0  0
 0  0      0 1024200 120400 850300    0    0     0     0  100  200  1  1 98  0  0

⚠️ 注意(1行目の罠)

1行目に表示される数値だけは「OSが起動してからの平均値」です。リアルタイムのシステム状態を示しているのは2行目以降になります。

各ヘッダーの主要な項目の意味は以下の通りです。

1. procs(プロセス状態)

  • r(runnable): CPUの割り当てを待っている(実行可能な)プロセス数。CPUコア数を超えていると「CPU待ちが発生して重い」状態です。

  • b(blocked): ディスクIOなどで処理が止まっている(割り込み不可能な睡眠状態の)プロセス数。ここが増えると「ディスクが遅くて重い」状態です。

2. memory(メモリ状況 / 単位: KB)

  • swpd: 使用中のスワップメモリ量(0が望ましい)。

  • free: 完全な空きメモリ量。

  • buff: OSのバッファキャッシュ領域。

  • cache: ページキャッシュ領域(Linuxは空きメモリを極力キャッシュに使うため、実質的な空きメモリは free + buff + cache で判断します)。

3. swap(スワップ状態 / 単位: KB/s)

  • si(swap in): スワップ領域(ディスク)からメモリに読み込まれた量。

  • so(swap out): メモリからスワップ領域(ディスク)へ追い出された量。

    • 💡 ポイント: siso に継続的に数値が出ている場合、深刻なメモリ不足(スワッピング)が発生していて動作が超低速化しています。

4. io(ディスクIO / 単位: ブロック/s)

  • bi(blocks in): ディスクから読み込んだ量。

  • bo(blocks out): ディスクへ書き込んだ量。

5. cpu(CPU使用率の割合 / 単位: %)

  • us(user): ユーザープログラム(WebサーバーやDB、自作プログラム等)が消費したCPU割合。

  • sy(system): カーネル(OS自体)が消費したCPU割合。

  • id(idle): 待機中(何もしていない)CPUの空き割合。

  • wa(iowait): ディスクなどのIO処理待ちでCPUがブラブラ待たされている時間の割合。ここが高いとディスクがボトルネックです。

💡 トラブルシューティングでの判断テクニック

サーバーが「なんか重い…」という時、vmstat 1 のどこを見れば原因が特定できるかのチェックリストです。

症状 注目する項目 判断基準
CPUネック procs r, cpu us, cpu id r がCPUコア数を超えている、id が0に近く us が高い。
メモリ不足 swap si, swap so siso の数値が 0 でなく、常にバタバタ動いている。
ディスクIOネック procs b, cpu wa, io bo b が発生している、wa が10%〜数十%と高い数値を出している。

🛠️ オプションの応用(見やすくする)

  • メガバイト単位で表示する(-S M または -m

    デフォルトはキロバイト(KB)表記なので見づらい場合、単位をM(メガバイト)に変更できます。

    Bash

    vmstat -S M 1
    
  • 回数を指定して自動終了する

    「1秒ごとに5回だけ出力して終了」したい場合、後ろに回数を付けます。

    Bash

    vmstat 1 5
タイトルとURLをコピーしました