Linuxでb(Blocked)が増え続ける時の原因と切り分け

  • URLをコピーしました!

Linuxサーバーを監視していると、vmstatb(Blocked)が じわじわ、あるいは継続的に増え続けるケースがあります。

CPU使用率は低い、ロードアベレージも一見高くない。 それでもレスポンスが悪化し、処理が詰まっている―― このような状況の正体は、ほぼ例外なくI/O待ちによるプロセス停滞です。

本記事では、

  • b(Blocked)が何を意味しているのか
  • なぜ増え続けるのか
  • どこを見て、どうなれば「解決」と判断できるのか

を、実運用でそのまま使える切り分け手順として解説します。

目次

b(Blocked)とは何か?

vmstatに表示される b は、

ディスクI/Oやストレージ応答待ちでブロックされているプロセス数

を表します。

つまり b が増えるということは、

  • CPUは仕事をしたくても
  • ディスクやストレージからの応答待ちで
  • プロセスが「止められている」

状態です。

ここで重要なのは、

bが増える = CPUが忙しいではない点です。

むしろ典型的な症状は、

  • CPU idle が高い
  • ロードアベレージが微妙に上がる
  • レスポンスが体感で遅い

という「分かりづらい遅さ」です。

b(Blocked)が増え続ける典型的な原因

① ディスクI/O待ち(最頻出)

最も多い原因は、ディスクI/Oの詰まりです。

  • ログ大量書き込み
  • バックアップ処理
  • DBのフルスキャン・チェックポイント

これらが走ると、I/O待ちが発生し、 プロセスはディスク応答待ちでbに積み上がります

この状態ではCPUは暇なので、 「負荷は低いのに遅い」という誤解を招きます。

② swap-in / swap-out によるI/O待ち

メモリが逼迫し、swapが使われ始めると、

  • メモリ → ディスク
  • ディスク → メモリ

というI/Oが発生します。

このswap I/O待ちによっても、 プロセスはブロックされ、bが増加します。

特に注意すべきなのは、

  • swap使用量が少量でも
  • si / so が継続的に出ている

ケースです。 これは「swapが原因の遅延」が始まっているサインです。

③ ストレージ遅延(SAN / 仮想環境)

物理ディスクに余裕があっても、

  • SANストレージの混雑
  • 仮想環境の共有ストレージ遅延

によってI/O応答が遅れ、bが増えることがあります。

この場合、OS上では原因が見えにくいのが特徴です。

実践的な切り分け手順

Step1:vmstatで全体像を確認

vmstat 1

注目ポイントは以下です。

  • b が継続的に増えているか
  • wa(I/O wait)が発生しているか
  • si / so が断続的または継続的に出ていないか

b + wa + si/so が揃っている場合、 I/O起因である可能性は極めて高いです。

Step2:iostatでディスクの詰まりを確認

iostat -x 1

以下を重点的に見ます。

  • %util が高止まりしていないか
  • await が異常に高くないか

重要なのは、

%utilが低くてもawaitが高い場合、体感遅延は発生する

という点です。

Step3:iotopでブロック犯人を特定

iotop -o

ここで、

  • どのプロセスがI/Oを占有しているか
  • 周期的に暴れている処理はないか

を確認します。

ログ・バックアップ・DBが犯人であるケースが非常に多いです。

どうなれば「解決」と判断できるのか

対処後、以下の状態になっていれば解決と判断できます。

  • b が 0 〜 微小で安定
  • wa がほぼ 0
  • si / so が発生しない
  • 体感レスポンスが回復

重要なのは、

一時的にbが下がることではなく、安定して増えないこと

です。

まとめ

  • b(Blocked)は「CPUではなくI/O待ち」のサイン
  • 増え続ける場合、ディスク or swap が原因
  • vmstat → iostat → iotop の順で切り分ける
  • bが安定して0付近になれば解決

bを正しく読めるようになると、 「CPU idleが高いのに遅い」というトラブルの正体が 一気に見えるようになります。

目次