負荷測定ツールにOSSのApache JMeterというものがあります。かなり汎用的でつぶしがきくよいツールで、私もよく使います。JMeterについては以下の資料がよくまとまっています。
で、負荷をかける場合にはそのサーバの限界性能がどこかを探るケースが存在しますが、クライアント側のスペック不足やシナリオの作成方法が原因で負荷をかけきれないというケースがあります。スペック不足はともかくとして、シナリオ作成の方法がまずいことで計測結果が不十分になることはかっこわるいので、私が気がついた対処方法をまとめます。
ループはループコントローラで書け!
負荷をかける場合に、ユーザ1 – ユーザ10000迄のデータに連続してアクセスしたいケースがあったとしましょう。JMeterでこれを実装するには「While Controller」と「ループコントローラ」を利用する方法があると思います。
While Controllerを利用した方法)
ループコントローラを利用した方法)
While ControllerでJavascriptを利用して変数評価を行う場合、非常に負荷が高くなるようで、ループコントローラと比較して数十分の1程度しか負荷がかけられなくなった事もあります。書き方は要注意ですね。
While Controller + Javascriptでループは回すなって事ですね。
計測時にリアルタイムでリスナーの統計レポート、結果をツリー表示、グラフ表示等は使うな!
JMeterでは各種リスナーが充実していて、エラー率・スループットが一目でわかる統計レポート・グラフ表示機能等が存在します。
しかしこれらの機能を負荷計測と同時に使用すると、これらの処理自体に負荷がかかる模様です。結果十分な負荷をかけられないという事も。
対策は、リスナーの「シンプルデータライタ」を利用することです。シンプルデータライタは計測時にログ(jtl)をとることだけ行いますので、負荷はあまりかかりません。
統計レポート・結果をツリー表示・グラフ表示で見たい場合は計測後にこれらリスナを登録し、計測ログ(jtl)を読み込ませればいいんです。これで計測時には十分な負荷をかけることが出来、結果も後で参照出来ると。
計測時にはリスナーの「シンプルデータライタ」を利用しろ!グラフ表示等は後で読み込ませて結果を確認しろ!という事ですね。
JMeterを使いこなすにはまだまだノウハウが必要ですね。勉強になります。



