キャパシティプランニングで失敗する根本原因は、「感覚で積む」という判断プロセスにある。適切な計測と負荷特性の把握なしにリソースを決定すると、本番稼働後に不足か過剰のどちらかに必ず偏る。この記事では、ピーク・平常・成長の三軸で需要を構造化し、ボトルネックを先に特定したうえで余裕量の境界を判断する設計思想を解説する。比較表とチェックフレームも提示するので、次の設計判断の材料として活用してほしい。
勘で積んだリソースが過不足を生む構造
感覚値で見積もるとどこで行き詰まるか
多くの構築プロジェクトで、初期のリソース見積もりは過去の経験や担当者の感覚に委ねられがちだ。「前回のシステムがこのくらいだったから」「ベンダーが提案してきた構成をそのまま採用」という判断が常態化している現場は少なくない。しかし、この見積もりはアプリケーションの負荷特性を無視しているため、本番稼働から3〜6か月でリソース不足か過剰のどちらかに行き着く。構築を任されたある担当者が、前任者の「だいたい8コア・32GBで足りる」という申し送りをそのまま踏襲した結果、バッチ処理が走る深夜帯にCPUが頭打ちになり翌朝の業務開始に影響が出たという話は、現場でよく耳にする。感覚値の見積もりは再現性がなく、次の構築プロジェクトにも引き継がれないため、組織として蓄積できないという問題も持つ。
不足より過剰が招く別の問題
リソース不足は可視化されやすいが、過剰はしばしば放置される。物理サーバーを10台追加したものの実際の平均CPU使用率が5%以下に留まり続けるケースでは、ライセンス費用・ラック占有・冷却負荷・運用監視対象の増加というコストが静かに積み上がる。さらに深刻なのは、「リソースが余っているのに性能問題が出る」という状況だ。CPUは余っているがI/Oが詰まっている、ネットワーク帯域が飽和しているといった見えにくいボトルネックが、過剰リソースの陰に隠れて発見を遅らせる。「リソースを足せば解決するはずだ」という誤った前提がさらなる過剰積みを招き、問題の本質から遠ざかる悪循環に入る。
初期見積もりが後工程に波及する構造
キャパシティの決定は構築フェーズの中でも早期に行われるため、その判断が後工程全体の設計に波及する。ネットワーク帯域・ストレージレイアウト・冷却設計・ラック数・電源容量はすべてサーバースペックと連動しており、初期見積もりを後から大幅に変更するには追加コストと工期延長が伴う。環境数が10を超えるような中規模以上の構築プロジェクトでは、初期の見積もり精度が最終的な構築品質を大きく左右する。このため、感覚ではなく計測と論理に基づく見積もりプロセスを設計段階で確立することが、後工程の手戻りを防ぐ最も有効な手段になる。
何を基準に必要量を見積もるかの判断
計測データの取得期間をどう判断するか
見積もりの起点は既存システムの計測データにある。移行プロジェクトであれば、移行元で少なくとも4週間以上の負荷データを取得することを基準としたい。1〜2週間の計測では週次の業務サイクルが1周しかカバーされず、月末・四半期末・決算期といった季節変動を見落とす。新規システムの場合は類似システムの実績値か、設計書に定義されたトランザクション数とデータ量から逆算するアプローチになる。いずれの場合も「平均値」だけを参照して設計するのは危険だ。平均CPU使用率が20%であっても特定の処理集中時に90%を超えるスパイクが存在することはよくあるため、99パーセンタイル値や最大値を必ず参照する。平均値での設計は「晴れの日の傘設計」であり、見積もりの信頼性を根本から損なう。
負荷の種類を分類して見積もる
リソースの必要量はCPU・メモリ・ディスクI/O・ネットワーク帯域の4軸で別々に評価する必要がある。Webアプリケーションはメモリとネットワーク帯域を、バッチ処理はCPUとディスクI/Oを主に消費する特性がある。この特性を無視して「全部盛り」の構成を選ぶと、一方のリソースは飽和しているのに別のリソースは遊んでいるという非効率が生まれる。実際の設計では、アプリケーションの処理フローを「フロントエンドリクエスト処理」「バックエンドAPI呼び出し」「DBクエリ」「非同期ジョブ」に分解し、それぞれが何のリソースをどれだけ消費するかをモデル化する作業が欠かせない。この分類なしに出た見積もり数値は、特定の軸で必ず破綻する。
既存環境からの類推と新規環境の扱い
既存環境から新環境へ移行する場合、単純に同スペックをコピーする判断は避けるべきだ。OSや言語ランタイムのバージョンアップ、コンテナ化、クラウドへの移行といった変化は、同じワークロードでもリソース消費量を大きく変える。コンテナ化によってCPUオーバーヘッドが増える場合もあれば、新しいランタイムで20〜30%のメモリ効率改善が得られるケースもある。新規環境では類推をベースにしつつ、ステージング環境での負荷試験を設計の一部として組み込み、計測値で見積もりを検証・補正するプロセスを確立することが信頼性の高い見積もりにつながる。「移行前と同じだから同じスペックでいい」という判断は、構成変更のたびに見直す習慣を持つことで回避できる。
ピーク・平常・成長を織り込む設計
ピーク倍率をどう設定するか
設計上の重要な判断の一つが、ピーク倍率の設定だ。「平常時の○倍を吸収できること」という形で性能要件を定義するが、この倍率の根拠が曖昧な設計をよく見かける。倍率の根拠は業務の特性から導く必要がある。ECサイトであればキャンペーン期間中に通常の5〜10倍のトラフィックが発生する可能性があり、社内業務システムであれば月次・四半期次の締め処理で2〜3倍のバッチ負荷が走ることが多い。業務部門から過去の最大負荷の実績値を引き出し、そこに安全係数(一般的には1.2〜1.5倍)を乗じた値を設計上のピーク容量とするのが現実的な判断だ。根拠のない倍率設定は、後から「なぜこのスペックにしたか」と問われたときに答えられない設計になる。
将来の成長率をどう織り込むか
キャパシティ設計では初期稼働時の需要だけでなく、運用期間中の成長を見込んだ余白の設計が必要になる。一般的に3年間の運用を想定する場合、年間20〜30%のデータ増加を見込んで初期容量を設定することが多い。ただし成長率の予測は不確実性が高いため、過度に大きな余白を最初から確保するよりも、拡張しやすい構成を選んで段階的に増設できる設計にする方が合理的だ。ストレージであれば初期容量の確保とともにスロットの余裕を設計し、ネットワーク帯域であれば上位機器への交換が容易なアーキテクチャを選ぶ。成長を「予測」で埋めるのではなく「構造」で吸収する思想が、長期的に安定したキャパシティ管理につながる。
複数シナリオで設計する意味
キャパシティ設計では悲観・中立・楽観の3シナリオを用意し、それぞれで必要スペックを計算したうえで採用するシナリオを意思決定することが望ましい。これは単なる机上の計算ではなく、後になって「想定外だった」と言えない設計責任を構造化する作業でもある。3シナリオの差分が小さければ中立シナリオで設計し、差分が大きければ「どの条件が揃ったら拡張するか」という判断基準を先に定義しておく。この判断基準があることで、運用フェーズでの追加投資の意思決定を感覚ではなく定量的な閾値で行えるようになる。シナリオ設計の副産物として、関係者間の認識合わせにも活用できる。
余裕を持たせる/オートスケールで吸収する/都度足す — 三戦略の比較
比較の前提を整理する
キャパシティの過不足に対処する戦略は大きく三つに分類できる。最初から十分な余裕を持ったスペックで固定構成を組む「余裕確保型」、ピーク時に自動でリソースを増減させる「オートスケール型」、必要になったタイミングで手動増設する「都度追加型」だ。どれが正解かは環境の特性と運用体制によって異なるため、以下の比較表で観点ごとに整理する。
| 観点 | 余裕確保型(固定スペック) | オートスケール型 | 都度追加型 |
|---|---|---|---|
| 初期コスト | 高い(ピーク分を常時確保) | 低〜中(必要時のみ拡張) | 低(最小構成から開始) |
| 対応速度 | 即時(既に確保済み) | 自動・分単位 | 遅い(発注〜納品に日〜週単位) |
| 適する負荷パターン | 予測可能な定常負荷 | 突発・不規則なスパイク | 緩やかで予測可能な成長 |
| 運用の複雑さ | 低(構成が固定) | 高(スケール設定・監視が必要) | 中(増設タイミングの管理が必要) |
| 向いている環境 | オンプレ・ライセンス固定環境 | クラウド・コンテナ環境 | 成長が見えている段階的展開 |
| 主な失敗パターン | リソース過剰・固定費の肥大化 | スケール設定ミスによる過負荷 | 対応遅延による本番障害 |
選定の判断ポイント
オートスケール型はクラウド環境で有効だが、設計が複雑になる点を見落としてはならない。スケールアウトのトリガー条件・スケールイン時のコネクション切断・ステートレス設計の担保・スケール後の監視アラートの調整など、固定構成では不要だった設計課題が生まれる。一方で都度追加型は計画性が要求される。発注から納品・セットアップまでに最短でも1〜2週間かかる物理サーバー調達を前提にすると、ボトルネックを察知してから対処するまでの間に業務影響が出るリスクが高い。戦略の選定は「負荷パターン」「環境の種類(オンプレかクラウドか)」「運用チームの規模と技術力」の三点から判断することが、選定の根拠として機能する。
ボトルネックを先に特定する設計思想
どこが詰まるかを先に想定する
リソースを全体的に増やすよりも、どこがボトルネックになるかを先に特定することが効率的な設計の前提になる。ボトルネックとは、システム全体のスループットを支配する最も制約の強いポイントだ。Webシステムの多くではDBのI/Oがボトルネックになりやすく、バッチ処理ではCPUかネットワーク帯域が律速になることが多い。設計段階でデータフローを追い、どのコンポーネントに最も負荷が集中するかを構造的に把握しておくことで、増強すべきポイントに集中してリソースを配分できる。「全部強くする」という発想は、ボトルネックの特定を放棄した見積もりにすぎない。
リソース間の依存と連鎖を把握する
一つのボトルネックを解消すると、次のボトルネックが別の場所に現れる。DBのI/O性能を改善してスループットが向上すると、今度はアプリケーションサーバーのスレッドプールが枯渇する、あるいはネットワーク帯域が飽和する、といった連鎖は実際の現場でよく起きる。このため、ボトルネックの特定は単一ポイントで終わらせず、連鎖的に次のボトルネックがどこかまでシミュレーションしておくことが重要だ。リソース間の依存グラフを設計書の一部として作成し、改善の優先順位を構造的に管理する手法が、この問題に対する実践的なアプローチになる。
先行指標を設計に組み込む
ボトルネックを「詰まってから発見する」のではなく「詰まる前に検知する」ための先行指標の設計が、運用フェーズの品質を左右する。CPU使用率が90%を超えてから対応するのではなく、「CPU使用率が60%を超えた状態が30分継続したらアラート」という先行指標を設計しておくことで、対応の余裕を確保できる。先行指標はリソースごとに設定し、監視設計と組み合わせてはじめて機能する。キャパシティ設計と監視設計は切り離して考えず、同じフェーズで並行して行うことが設計上の重要な判断だ。監視を後回しにする構築プロジェクトは、先行指標のない飛行を続けることになる。
積みすぎ・切り詰めすぎの境界の見極め
余剰が生む見えにくいコスト
リソースを大きく積みすぎることにはコスト以外の問題も伴う。運用監視対象が増えれば監視ツールのライセンス費用と担当者の認知負荷が増加する。物理サーバーであればラック占有・電力・冷却の制約が生まれ、仮想環境でもvCPUやメモリの割り当てが他テナントのリソース競合に影響する。また過剰なリソースは性能問題の診断を難しくする。「リソースは余っているのになぜ遅いのか」という状況は、実際のボトルネックをリソース指標から見えにくくするため、問題解決に余分な工数がかかることになる。現場では「余裕があるから安心」という判断がこの落とし穴を深める。設計の目標は「多ければ安全」ではなく「適切な量を根拠を持って決定すること」にある。
切り詰めによる運用リスク
逆に切り詰めすぎた構成は、予期しない負荷増加に対するバッファがないため、業務に直結する障害リスクが高まる。特にストレージは危険だ。ディスク使用率が95%を超えた状態でログが書き込めなくなりサービスが停止するという事態は、切り詰めすぎた設計が招く典型例として現場でよく聞く。「初期はコストを抑えて後で拡張する」という方針がとられることがあるが、物理環境での後からの拡張には工事・停止・テストが伴うため、初期設計の最低ラインを下回ることのコストは想定以上に大きくなる。切り詰めの判断は、拡張コストと障害リスクのトレードオフとして設計書に明示しておく必要がある。
境界を判断する基準の設定
積みすぎと切り詰めすぎの境界は、「平常時の使用率の上限をどこに設定するか」という判断に集約される。一般的な指標として、CPU・メモリは平常時に設計上限の60〜70%を超えないこと、ストレージは使用率80%以下を維持できる初期容量を確保することが基準として使われることが多い。ただしこの数値は業務特性や拡張の容易さによって調整が必要だ。重要なのは数値そのものではなく、「その数値を超えたら何をするか」という次の判断までを設計段階で定めておくことだ。境界値と対応手順をセットで設計することが、後工程の手戻りを構造的に減らす。
キャパシティ設計チェックフレーム
設計前に問うべき問い
キャパシティ設計に入る前に、以下の問いに答えられる状態かを確認する必要がある。計測データがあるか・どの期間の・どの指標か。業務の負荷パターン(日次・週次・月次・季節)は把握できているか。ピーク倍率の根拠を業務部門から取得できているか。運用期間中の成長率の想定はあるか。拡張の手段(物理増設・クラウドリソース増設・オートスケール)は構成上可能か。この問いに答えられない状態で設計を進めることは、後工程に修正コストを持ち越すことを意味する。手を動かすのはこれらの問いに答えが揃ってからだ。
設計完了を確認するチェックリスト
以下は、キャパシティ設計の完了を確認するためのチェックフレームだ。すべての項目が完了してはじめて設計が固まった状態と判断できる。
- 計測データに基づく平均値・99パーセンタイル値・最大値を把握している
- CPU・メモリ・ディスクI/O・ネットワーク帯域を個別に評価している
- ピーク倍率に業務部門承認の根拠がある
- 運用期間(一般的に3年)の成長を見込んだ余白を設計している
- 悲観・中立・楽観の3シナリオを計算し、採用シナリオを明示している
- ボトルネック候補を特定し、連鎖する次のボトルネックも把握している
- 余裕確保型・オートスケール型・都度追加型のどれを選ぶかを負荷特性に基づいて判断している
- 先行指標(閾値と監視設定)を設計フェーズで決定している
- 平常時の目標使用率(CPU/メモリ: 60〜70%以下、ストレージ: 80%以下)を設定している
- 閾値超過時の対応手順(誰が・何をするか)を設計に含めている
- 拡張経路(ハードウェア追加・クラウドリソース増設)の実現可能性を確認している
- ステージング環境での負荷試験で計測値と見積もり値の乖離を検証している
このチェックフレームは、設計者が一人で完結できるものではない。業務部門・運用チーム・インフラ調達の担当者との連携なしには埋まらない項目が複数ある。キャパシティ設計を「サーバースペックを決める作業」と捉えると視野が狭くなる。プロジェクト全体の情報を統合する設計判断として位置付けることで、後工程の手戻りと本番稼働後のリソース問題を構造的に防ぐことができる。計測・分類・シナリオ・ボトルネック特定・戦略選定・境界判断という一連の流れを設計プロセスとして定着させることが、次のプロジェクトへの再現性ある資産になる。
▶ 手を動かして本番まで到達する
その設計判断を、RHEL10の本番環境で手を動かして固めませんか
ここまでの設計判断は、読めば腹に落ちます。ですが「自分の手で本番まで通しきる自信」は、それとは別の話になります。
最大6名の少人数で、構築実務者の到達点まで引き上げます。座学で終わらせず、本番相当の環境で判断を検証する2日間です。
Linuxセミナー上級編(RHEL10)|最大6名の少人数ハンズオン