🐱 うさねこ教室 Python と可観測性の教室

使用率と飽和

🐱 この章の目次

使用率とレスポンスタイムの関係

リソースの 使用率(utilization) が上がると、レスポンスタイムは線形ではなく指数的に悪化します。 これは待ち行列理論から導かれる性質で、『詳解システムパフォーマンス』第 2.3.11 節で詳しく解説されています。 使用率 70% を超えたあたりから急激にレイテンシが増大する「ホッケースティック曲線」が現れます。

M/M/1 キューモデル

M/M/1 キュー は、到着がポアソン過程・サービス時間が指数分布・サーバーが 1 台の待ち行列モデルです。 平均レスポンスタイム R は次の式で表されます。

R = S / (1 - ρ)

ここで S はサービスタイム、ρ は使用率(0 ≤ ρ < 1)です。 ρ が 0.9(90%)のとき R は S の 10 倍、ρ が 0.99 なら 100 倍になります。

ホッケースティック曲線

レスポンスタイム
    │            ╱
    │           ╱
    │         ╱
    │       ╱
    │     ╱
    │___╱______________
    0%     50%    100%
         使用率

この曲線は「余裕を残して運用すべき理由」を端的に示しています。 本番環境では使用率 70% 前後をアラート閾値に設定するのが一般的です。

飽和のシグナル

飽和(saturation) は、リソースが処理能力を超えた状態を指します。 飽和が起きると、リクエストはキューに溜まり、レイテンシが急増します。

飽和を検知するための典型的なシグナルは以下のとおりです。

  • CPU: ランキュー長 > CPU コア数
  • メモリ: スワップ発生、OOM killer 発動
  • ディスク: I/O キュー長の増大(avgqu-sz の上昇)
  • ネットワーク: TCP 再送率の上昇、パケットドロップ

飽和が恒常的に発生している場合は、スケールアップ(リソース増強)またはスケールアウト(台数追加)が必要です。