負荷試験

最近、久々に負荷試験をやる機会があったので、
備忘録的な感じヾ(。・ω・。)
jemeterで負荷試験。
今回は、webアプリケーションの機能追加のためのやつー。

                                                    • -

1、シナリオを決める。
・・・あんまし、やったことない(´-ω-`)
ユーザの動きを想定して、いろいろ決めた方がよろしいんだけど、
とりあえず省略。

2、想定PVを割り出す。
スループットを出すため。

3、アプリケーションの実装
アプリケーションの負荷試験の場合は、
実際にリリースするアプリ(に近いもの)を使うけど、
メインがアプリでない場合は、
負荷試験の対象外のミドルウェアAPIを利用すると
迷惑がかかる場合が多いので
単純なのをつくりますヾ(。・ω・。)

4、サーバ、ミドルウェアの準備
jmeter動かすサーバも用意する

5、データの準備
せっせとコピーしたりつくったりφ(.. )

                                                    • -

で、やっとjmeter

                                                    • -

6、ローカルにjmeter入れる。
※テスト計画はGUIでやった方が簡単ラクチンなので、
 GUIで作ったjmxファイルをサーバにぽいする。

7、jmeterの起動

[nashuaki@hostname ~]$ ${JMETER_HOME}/jmeter

8、テスト計画〜スレッドグループの作成

テスト計画 > 追加 > Threads(Users) > スレッドグループ

「Ramp-Up期間(秒)/スレッド数」ごとに1スレッド作成する。

今回はこの設定。
・スレッド数:100
・Ramp-Up期間(秒):10
・ループ回数:無限

9、テスト計画〜HTTPリクエストの設定をする

スレッドグループ > 追加 > HTTPリクエスト

負荷試験を行うhttpリクエストの穴埋めφ(.. )

リクエストを送るパラメータのとこは、

${__StringFromFile(${JMETER_HOME}/file.txt,,,)}

とかで外部ファイルを指定したり、

${__Random(1,10,)}

とかでランダム値(1~10)を指定できたりする。
他にもいっぱい関数的なのが用意されてるみたい。
http://jakarta.apache.org/jmeter/usermanual/functions.html

10、テスト計画〜タイマーの設定をする

スレッドグループ > 追加 > タイマ >定数スループットタイマ

ここで
「ターゲットスループット(サンプル数/ミリ秒)」
とか書かれてるけど、
正しくは、
「ターゲットスループット(サンプル数/分)」
らしい。
間違うのもどうかと思うけど、分単位って(´-ω-`)

想定リクエストを
100req/seq
とするなら、
100req * 3(ピーク時) * 1.5 / 60(seq)
とかにします、うちは。
1.5は初めて負荷試験やったときに
リリース時には想定をこえてたっていう嫌な思い出があるので(´-ω-`)
「Calculate Throughput based on」は
「all active threads in current thread group」
にしときました。

11、テスト計画〜リスナー
・・・を設定したいとこだけど、
これすると落ちちゃったりするので、
とりあえず見送り(´□`。)

12、jmeterの実行

[root@stress-server ~]$ ${JMETER_HOME}/bin/jmeter -t ${JMETER_HOME}/test.jmx -n

これだと実行ユーザがログアウトしたりすると
終了したりするので、

[root@stress-server ~]$ nohup ${JMETER_HOME}/bin/jmeter -t ${JMETER_HOME}/test.jmx -n &

的な感じで実行ユーザがいなくなっても
継続して実行できるようにする。

13、結果を取得して考察する
負荷をかけるサーバでは
vmstatやuptimeの値を継続して取得できるようにしておく。

                                                    • -

がんばるγ(▽´ )ツヾ( `▽)ゞ