【ぼとるねっく】

ボトルネック とは?

最終更新:
💡 システムの速度を決める「一番狭い通り道」

ある負荷や条件のもとで、システム全体の性能を制限している箇所。CPU・メモリ・ディスク・ネットワークやソフトウェアの待ちなどが原因になり、処理件数と応答時間では見るべき点も異なる。

📌 このページのポイント
全体の処理件数を制約する「細い道」 各工程が並行して動く仮の例 1件は順に3工程を通る 工程A 工程B 工程C 100件/秒 10件/秒 100件/秒 各段の処理能力 → 全体の上限は10件/秒 件数の制約と、1件の応答時間は区別 使用率だけでなく待ち状態も調べる
100・10・100件/秒は各工程の処理能力を示す仮の値。定常的な全体の処理能力は10件/秒以下になる。1件の応答時間は処理時間や待ち時間も含めて確認する。
ひよこ ひよこ
ボトルネックって何?
ペンギン先生 ペンギン先生
全体の性能を制限する箇所だよ。瓶の首が細いと水の流量が限られる、という比喩なんだ。ディスクの読み込みを待つ処理なら、CPUだけ速くしても処理件数が増えにくいことがある。ただし、どこが制限になるかは処理内容や負荷によるよ。
ひよこ ひよこ
ボトルネック以外を改善しても無意味なの?
ペンギン先生 ペンギン先生
そうとは限らないよ。図のように各工程が並行して動くパイプラインでは、最も低い処理能力が全体の件数を制限する。一方、1件が直列に進む処理で、DBが90ms、その他が10msなら、その他を5msにすると合計は100msから95msになる。応答時間の改善がゼロというわけではないんだ。
ひよこ ひよこ
どうやって見つけるの?
ペンギン先生 ペンギン先生
CPUの使用率、メモリの状態、ディスクやネットワークの使用量に加え、待っている処理の数やエラーを調べるよ。処理がCPUで実行中なのか、CPUの順番待ちなのか、I/Oやロックを待っているのかも見る。長い時間の平均だけだと、短い混雑を見落とすことがあるんだ。
ひよこ ひよこ
見つけたら機器を強化すればいい?
ペンギン先生 ペンギン先生
原因に合う対策を選ぶよ。不要な処理や問い合わせを減らす、メモリを増やす、共有資源の待ちを減らすなどが候補だね。WebサービスならDBへの問い合わせや接続待ちを調べる場合もある。対策後は同じ負荷で再測定し、別の制限が現れていないかを確認するんだ。
ひよこ ひよこ
使用率が高い場所が原因とは限らないの?
ペンギン先生 ペンギン先生
限らないよ。通常、I/O待ちで眠っているスレッドは、その間CPUで計算していない。「CPUが100%ならディスク待ちで空回り」とは判断できないんだ。また、メモリ不足でページの読み書きが増え、ディスクの待ちが長くなることもある。複数の指標と処理の待ち状態を照らし合わせて原因を探すよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ボトルネック」って出てきたら「全体の性能を制限する詰まりどころ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Bottleneck」 = 瓶の首
💬 瓶(Bottle)の首(Neck)は一番細い部分。水を出すとき、瓶の首の太さで流量が決まるイメージだね

参考資料

← 用語集にもどる