---
title: 測定、負荷試験、離散事象シミュレーション
url: https://doc.liz6.com/ja/theory/03-queueing-theory/10-measurement-and-simulation
locale: ja
area: theory
tags:
- 待ち行列理論
- 基礎理論
date: 2026-09-10
modified: 2026-09-10
description: 公式の適用は測定と再現可能な実験で確かめます。良い負荷試験は完了数だけでなく、予定された到着、待機の場所、終了時に未完了の要求も記録します。
---

# 測定、負荷試験、離散事象シミュレーション

公式の適用は測定と再現可能な実験で確かめます。良い負荷試験は完了数だけでなく、予定された到着、待機の場所、終了時に未完了の要求も記録します。

## 開放負荷と閉鎖負荷

一定人数が一件の完了後に次を送る方式は閉鎖負荷です。開放モデルは応答低速化と独立に到着を予定します。どちらも現実の需要に合えば適切で、[k6公式文書](https://grafana.com/docs/k6/latest/using-k6/scenarios/concepts/open-vs-closed/)は実行方式を明確に区別しています。

10 msごとに発行予定があり、サーバーが100 ms停止したとします。生成器が直前の応答を待つなら、停止中に来るはずの要求は標本そのものがありません。これはcoordinated omissionの典型です。実送信から完了だけを測ると、生成器内の予定時刻から実送信までの遅れも欠落し得ます。

予定、実送信、受付、処理開始、最終結果を残します。開放生成器も仮想ユーザー、CPU、接続、帯域を使い切ることがあるので、漏れた・遅れた発行と実到着率を報告します。[HdrHistogram](https://github.com/HdrHistogram/HdrHistogram)の予定間隔による補正も負荷仮定に依存し、任意の実流量の事実を全部復元するものではありません。

## 離散事象は画面フレームを必要としない

単一FIFO窓口のLindley再帰は：

$$W_{q,i+1}=\max(0,W_{q,i}+S_i-I_{i+1}).$$

同値な形は $b_i=\max(a_i,d_{i-1})$、$d_i=b_i+S_i$。毎ms回す代わりに事象へ直接進み、同時刻の順序を固定します。[SimPyのスケジューリング説明](https://simpy.readthedocs.io/en/latest/topical_guides/time_and_scheduling.html)は模擬時間と事象順序を区別します。本実験は再帰を独立実装し、画面速度に依存しません。

```python
# 到着と処理は同じ時間単位で独立に生成した系列
end = 0.0
samples = []
for arrival, service_time in zip(arrivals, service):
    start = max(arrival, end)
    end = start + service_time
    samples.append((arrival, start, end))
```

## ウォームアップ、打切り、到着群

空から始めると早期要求の待ちが短く偏る場合があります。実験は最初の20%の到着を除きますが、高利用率でも十分な長さだという証明ではありません。最終到着時刻を観測打切りとし、その後全件の処理を終えます。

ウォームアップ後の到着者全体の平均と、打切り前に完了した者だけの平均を並べます。後者は未完了を除き、過小評価の原因となりますが、一回の差は軌跡に依存します。FIFOなら未来の到着を止めても既に並ぶ要求の完了時刻は変わらず、排出完了で到着群の全時間を回復できます。未来の到着が選択を変える優先度方式にはこの理由を移せません。

**測定、負荷試験、離散事象シミュレーション · 実験**

初期は空のM/M/1、μ=100/s。固定シードで生成し、最初の20%の到着をウォームアップとして除外します。最終到着で打ち切った後、到着群を全件処理します。定常到達の保証や信頼区間ではありません。


シードを固定して負荷を変え、次にシードを変えて標本変動を見ます。経験曲線は有限個の閾値に対する超過割合、理論線は定常M/M/1の厳密な裾です。標本p99は昇順の $\lceil0.99n\rceil$ 番目。一回の結果は理論と一致する必要がなく、一致しても実サービスのモデル正当性を証明しません。

## 判断に使える結果へ

独立な反復を行い、各回の条件、シード、ウォームアップ、観測長、不確実性を残します。連続した待ち時間は相関しやすく、すべてIIDとして狭い信頼区間を作るのは不適切です。独立反復や条件を満たすバッチ平均法を検討します。飽和付近では相関と回復の時間が長くなります。

成功、拒否、タイムアウト、取消、未完了数、種別分布を保持します。タイムアウトは閾値まで結果がない情報であり、正確な完了時間ではありません。インスタンス別p99を平均せず、互換ヒストグラムか標本を統合して分位点を求め、バケット精度と対象群を宣言します。

## 確認問題

1. 1000標本のp99は、およそ何個の上側標本に支えられますか。

<details><summary>考え方</summary>

約10個です。少数の遅い標本で値が大きく変わり、相関、初期偏り、打切りも影響します。小数三桁を表示しても精度を保証しません。

</details>

2. 同じシードの二回で同じp99なら実装は正しいですか。

<details><summary>考え方</summary>

再現性だけの確認です。手計算軌跡、独立な統計計算、既知モデルの長期挙動、境界条件も検証します。再現する誤りも誤りです。

</details>
