JMeterのスレッド、RampUp、ループとリクエスト送信間隔

こんにちは。技術部3課運用チームのftaniです。
 

探し物(前回前々回前々々回)が続いて少し飽きてきたので、、、今回は
趣向を変えて「Jmeterのスレッド、Ramp-Up、ループ」をお題にしてみました。


負荷試験でよく使われるJMeterですが、スレッドとループの値の組み合わせ方で、
リクエストの投げ方が異なりますので、その辺りのことを書いてみます。

マニュアル「4.1 ThreadGroup」

 http://jmeter.apache.org/usermanual/test_plan.html

には以下のように記述されています。

The ramp-up period tells JMeter how long to take to "ramp-up" to the full number of threads chosen. If 10 threads are used, and the ramp-up period is 100 seconds, then JMeter will take 100 seconds to get all 10 threads up and running. Each thread will start 10 (100/10) seconds after the previous thread was begun.


この説明から「ramp-up」は

 設定したスレッド数に達するまでのトータルの期間(秒)。

と読み取れます。

「スレッド:10」「ramp-up:100」なら

 ・全10スレッドを生成し実行するのにトータル100秒かける。
 ・各スレッドは前スレッドが開始されてから10秒(100 ÷ 10)でスタート。

となります。

また、「ループ」は各スレッド毎にループさせる回数となり、JMeterで
負荷試験を行う場合、リクエストの総数は、

 リクエスト総数 = スレッド × ループ

で計算できます。このため、Ramp-Upを「5」で固定にした場合、

 (1)「スレッド:25」、ループ回数:1」

 (2)「スレッド:5」、「ループ回数:5」

は、どちらも5秒間で25件のリクエストを投げることになりますが、
ミクロレベルではリクエストの投げ方に違いがあります。

リクエストの送信間隔はWireSharkを使い以下の手順でグラフ化して
確認しました。

・WireSharkでパケット取得後「Statistics → IO Graph」でグラフを表示。
 ・「IO Graph」画面の「Graph1」の「Filter」で以下のフィルタリングを行い、
 送信パケットのみ表示。
  http && ( ip.dst_host == 宛先IPアドレス )
・「X Axis」の「Tick interval:」を「0.01sec」に設定。
・「Y Axis」の「Unit:」を「Packets/Tick」としパケット数を表示。


まずは、(1)の
 スレッド数:25
 Ramp-Up期間(秒):5
 ループ回数:1
のパターンの場合。

Thread25-RampUp5-Loop1-NoDelayThreadCreation

リクエストのパケットは1秒間に5回、等間隔で綺麗にならんでいます。

続いて(2)の
 スレッド数:5
 Ramp-Up期間(秒):5
 ループ回数:5
のパターンはどうでしょう。

Thread5-RampUp5-Loop5-NoDelayThreadCreation


確かに秒5件のリクエストですが、前半の0.25秒間に5件の
リクエストを投げて、次のリクエスト開始までお休みという
動きですね。。。

もう少しリクエスト数を増やすとどうなるでしょう。秒間25件で
試してみましょう。

では、
 スレッド数:75
 Ramp-Up期間(秒):3
 ループ回数:1
のパターンから。

Thread75-RampUp3-Loop1-NoDelayThreadCreation

リクエストのパケットは割と等間隔で綺麗にならんでいます。

続いて、
 スレッド数:3
 Ramp-Up期間(秒):3
 ループ回数:25
のパターンはどうでしょう。

Thread3-RampUp3-Loop25-NoDelayThreadCreation


想像通り、ムラがあるようです。

X軸の単位を「0.1sec」に変えて比較してみましょう。


・「スレッド数:75」、「ループ回数:1」の場合
Thread75-RampUp3-Loop1-NoDelayThreadCreation-0.1sec

・「スレッド数:3」、「ループ回数:25」の場合
Thread3-RampUp3-Loop25-NoDelayThreadCreation-0.1sec

大分違いますね。。。

今回の検証はやや極端な組み合わせだと思いますが、負荷試験の
目的に合わせて「スレッド」と「ループ」を適切に組み合わせることが
重要ですね。

では、この辺で。

 

Share on Facebook0Tweet about this on Twitter0Share on Google+0Share on LinkedIn0Pin on Pinterest0