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

このページの目次

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

開放負荷と閉鎖負荷

一定人数が一件の完了後に次を送る方式は閉鎖負荷です。開放モデルは応答低速化と独立に到着を予定します。どちらも現実の需要に合えば適切で、k6公式文書は実行方式を明確に区別しています。

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

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

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

単一FIFO窓口のLindley再帰は:

同値な形は 、。毎ms回す代わりに事象へ直接進み、同時刻の順序を固定します。SimPyのスケジューリング説明は模擬時間と事象順序を区別します。本実験は再帰を独立実装し、画面速度に依存しません。

# 到着と処理は同じ時間単位で独立に生成した系列
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は昇順の 番目。一回の結果は理論と一致する必要がなく、一致しても実サービスのモデル正当性を証明しません。

判断に使える結果へ

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

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

確認問題

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

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

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

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