かまたま日記3

プログラミングメイン、たまに日常

JMeterメモ

絶賛負荷試験で使っているので、分かったことをメモ

スレッドグループについて

「Rapm-up期間(s)」の間に「スレッド数」分のスレッドを作って各スレッドが「ループ回数」分ループする
例えばRamp-up期間600、スレッド数60、ループ回数10だとすると、10分の間に60スレッド生成され各スレッドが10回ループする。
このためこの設定でHTTP通信を行う場合、理論上は10req/sの負荷がかけられるハズ。

スループット調整したい

実は上記の場合各スレッドの開始は等間隔に(10秒に1回)行われるが、ループ処理はできるだけ早くやろうとするためループ処理はサーバの処理能力の限界のスループットで処理される。

等間隔にリクエストを送ってスループットを調整したい!と思った場合、その場合の方法として最初に思いつくのは「ループ回数を1回にしてRamp-up期間とスレッド数でreq/sを調整する」だが、この場合長時間のテストだとスレッド数が馬鹿でかくなってしまうのでJMeter側がすぐにOOMを起こしてしまう。

二つ目の方法としては「定数スループットタイマ」を使う。
これはスループットを指定した値(サンプル/分)*1に抑えるというもの。

正しい負荷がかけられているか?

スレッド数を減らしてループ数を増やすと同じリクエスト数でJMeterの負担は減らせるが、その分同時接続数が下がるので正しい負荷をかけられていない可能性がある。システムの利用シチュエーションをちゃんと想定して値を調整する。

リモート実行を活用する

JMeterには複数台のJMeterサーバを使って負荷をスケールアウトさせることができる(「JMeterサーバ」で検索)

長時間高負荷をかけたい場合は、「結果をツリーで表示」「結果を表で表示」は外す

上記のリスナは結果をすべてメモリ上に持つので、メモリ消費が激しくなる

*1:秒間にしてほしかった・・・値の調整がめんどい。