【Jmeter】負荷量を調整する方法
要約
この記事ではJmeterで負荷量を調整する方法2つを説明している
1.Think Timeで負荷量を調整する
2.定数スループットタイマーで負荷量を調整する
- Think Timeで負荷量を調整した場合、何らかの理由ででサーバ側のレスポンスタイムが落ちた場合、目標スループットは出せなくなる。
- 定数スループットタイマーで負荷量を調節した場合、何らかの理由でサーバ側のレスポンスタイムが落ちた場合でも目標スループットが達成できる時がある。
使用資材・環境など
Jmeterから同じ端末内のApacheへアクセスして静的コンテンツを取得するだけのシナリオを使用する。
また、目標スループットは10TPSとする。
Apacheへアクセスすると It works! と表示されるhtmlが返却されるだけ。
負荷シナリオの共通設定
- 使用するシナリオはスレッドグループの中に1つのHTTPサンプラーがあるだけ。
- スレッドグループの設定は同じで以下の通り
- スレッド数:20
- RampUp:0秒
- ループ回数:無限
- 「Specify Thread lifetime」にチェックを入れ「Duration」を60秒に設定する。
下記シナリオに「Think Time」または「定数スループットタイマー」を入れ負荷量を調節する。
そのまま負荷掛けしてみる
「Think Time」も「定数スループットタイマー」も入れずにそのまま負荷掛けしてみる。
スタートした後、約5秒でsocket枯渇によるエラーが発生した。
●参考
Jmeterはリクエストに対するレスポンスを受け取るとすぐに次のリクエストを送信するため、レスポンスタイムがとても速いとsocketの作成がsocketの上限値に達してしまい、socket枯渇のエラーが出てしまう。
●テスト結果
Jmeterはレスポンスを受け取るとすぐに次のリクエストを送信するため、Think Time等を設定してリクエスト間隔を調整しないと、socket枯渇のエラーにかかわらずとても多くの負荷を生成してしまう。
Think Timeで負荷量を調整してみる
静的コンテンツを返却するだけなのでレスポンスタイムは100ミリ秒もかかっていない。また、スレッド数は20なのでThink Timeを1秒程度では目標スループットに対して過負荷になってしまうため1.9秒としてみる。
「Think Time」 という名前で「Flow Control Action」というサンプラーを追加している。
負荷をかけてみると大体10TPSにはなっている。
Think Timeで調節をする場合はスレッド数やレスポンスタイムからどれくらいThink Time を入れる必要があるか計算して調節する必要がある。
今回はとても簡単な負荷シナリオなので計算も簡単だったが、負荷シナリオが長く、レスポンスタイムにもばらつきがある場合は負荷をかけて結果を見ての繰り返しでThink Timeを調節する必要がある。
定数スループットタイマーで調整してみる
<定数スループットタイマーについて>
設定したスループット(TPM)になるように送ったリクエストの結果に応じて次のリクエストの送信を遅らせ、目標TPSになるようにリクエスト間隔をよしなに調整してくれるタイマー。
スレッドグループの下に定数スループットタイマーを入れ、TPM(Transaction Per Minutes)に600を入力。TPS(Transaction Per Second)ではなくTPMなので注意。
また、Calculate Throughtput based on: を「all active threads in current thread group (shared) 」にする。ここの設定をミスると全く狙ったスループット通りにならないので注意すること。
今回はとても単純な負荷シナリオのため、10TPSちょうどとなった。
定数スループットタイマーは正確に狙ったスループットになるわけではないが、そうなるようにリクエスト間隔を調節してくれるので、大体近しいTPSになる。
まとめ
- Think Time
- 定数スループットタイマー