Carpe Diem

備忘録。https://github.com/jun06t

負荷ツールのスレッド数・Ramp-Up期間・ループ回数の関係

概要

負荷ツールで負荷をかける時の説明でよく見るのは

項目 計算式
総テスト回数 スレッド数×ループ回数
1秒あたりのリクエスト数 総テスト回数÷Ramp-Up

ですが、例えば分間600アクセスを想定した時に

設定項目
スレッド数 600
Ramp-Up期間 60
ループ回数 1

とした場合と

設定項目
スレッド数 100
Ramp-Up期間 60
ループ回数 6

では先ほどの説明だとどちらも総テスト回数1秒あたりのリクエスト数は同じです。
それぞれのケースの時にかかる負荷の違いが分からなかったので調べてみました。

環境

各用語の説明

スレッド数

JMeterが生成するクライアント数です。
スレッド数=アクセスするユーザ数と考えればOK。

Ramp-Up期間

設定したスレッド数を何秒以内に起動・実行するかの指定です。
例えばスレッド:10、ramp-up:100なら

  • 全10スレッドを生成し実行するのに100秒かける
  • 各スレッドは前のスレッドが開始されてから10秒(100 ÷ 10)毎に開始

となります。

ループ回数

1スレッド(1ユーザ)が1つのテストケースを何回繰り返すかの指定です。
これは前のテストケースが完了したらすぐ次のテストケースを実行します。

動作検証

簡単のため以下のように低い数値で検証してみます。
どれも20秒間に10リクエスト投げるというテストです。

テストA

設定項目
スレッド数 10
Ramp-Up期間 20
ループ回数 1

テストB

設定項目
スレッド数 5
Ramp-Up期間 20
ループ回数 2

テストC

設定項目
スレッド数 2
Ramp-Up期間 20
ループ回数 5

結果

テストA

f:id:quoll00:20171003095921p:plain

Ramp-Up / スレッド数=2

で2秒毎にスレッドが起動し、リクエストを1つ1つ均等に投げてます。

テストB

f:id:quoll00:20171003095931p:plain

Ramp-Up / スレッド数=4

で4秒毎にスレッドが起動します。しかし先程と違って、各スレッドは1つ目のテスト終わったらすぐに2つ目のテストを実行します。

テストC

f:id:quoll00:20171003095940p:plain

Ramp-Up / スレッド数=10

で10秒毎にスレッドが起動します。各スレッドがすぐに次のテストを実行するので、リクエストに偏りが起きていることが分かります。

まとめ

今回の検証によって

  • ループ回数を1にすればリクエストが均等に分かれる
  • ループ回数を複数にすればリクエストに偏りが起きる

ことが分かりました。特に後者はRamp-upを短くすれば複数のリクエストが並行して投げられることになるので、均等に投げるよりは実際のユーザリクエストに近いのではないかと思われます。

ソース