Apache JMeterメモ

Website: http://jmeter.apache.org/

Apache JMeterを教えてもらったので、後で見返せるようにメモ。

Apache Software Foundationで開発されているオープンソースJavaアプリケーション Webサーバーに対して複数のHTTPリクエストを送信し負荷をかけたり、JDBCを経由してデータベースサーバーに負荷をかけたりできる

基本的な流れ

起動

最新のzipバイナリをダウンロード・解凍。

$ cd apache-jmeter-3.0/bin
$ java -jar ApacheJMeter.jar

スレッドグループ

f:id:nwpct1:20161118150902p:plain

  • スレッド数: 並列にリクエストを飛ばしたい数(同時アクセス)
  • ループ回数: 1人が10回リクエストを送る

サンプラー

リクエストを送るためのもの。 よく使うのはHTTP SamplerとJDBC Sampler.

f:id:nwpct1:20161118150925p:plain

  • Host: 192.168.45.10
  • Port: 80 (80の場合は省略可)
  • Path: /pukiwiki/

リスナー

負荷はもうかけられるが、結果を見るための設定がない。それがリスナー。

f:id:nwpct1:20161118150945p:plain

「結果をツリーで表示」と「結果を表で表示」をクリック。

  • 結果をツリーで表示からは、リクエストや応答データが見れる
  • 結果を表で表示は、ズラッと全部見たい時に便利
    • Connect Time: 接続時間
      • スレッド数1でループ回数を5とかにすると、keep-aliveが有効なおかげで2回目以降のリクエストのconnect timeが0になるのが確認できる。

リスナーは何回も実行すると溜まっていくので、「ほうき」のアイコンの「消去」で掃除できる。

実行

「開始」ボタンを押したら開始出来る。

シナリオキャプチャ

ブラウザで操作を記録させて、シナリオを簡単に作ることができる。

HTTPプロキシサーバを追加

f:id:nwpct1:20161118151004p:plain

f:id:nwpct1:20161118151023p:plain

  • Portは使っていない番号に設定 (ここでは8999)
  • 除外するパターンを .*.css.php.* と最後にも .* を付けているのは、クエリパラメータも含めるため

HTTPプロキシの設定

Chromeの「設定」>「詳細設定」>「プロキシ設定の変更」から、上で設定したポート番号を指定。

f:id:nwpct1:20161118151050p:plain

開始

「HTTPプロキシサーバ」>「開始」を押したら(ここで鍵がどうのこうのってメッセージが出たけどとりあえずOKで進めてみた)、Chromeを開いて検証したいようにブラウザで操作。

終わったら「HTTPプロキシサーバ」>「停止」

これで終わり。緑の「開始」ボタンをクリックすると実行してくれる。

その他

ユーザ定義変数

f:id:nwpct1:20161118151105p:plain

設定しておくと、次に127.0.0.1とかが出てきた時に、自動で ${PUKIWIKI_HOST} とかを埋め込んでくれる。 あとでこの変数のvalueを変えるだけで済んで便利。

HTTPリクエストの詳細設定

「Advanced」>「全てのイメージとアプレットを繰り返してダウンロードする」を選択すると、そこのページのCSSや画像も全部ダウンロードしてくれる。

スレッドグループの設定

スレッド数やループ回数以外にもいくつかオプションがある。 例えば、60秒間負荷をかけたい場合は、ループ回数を無限、持続時間を60にすればいい。

MySQL(MariaDB)の計測

Setup

CentOS7にMariaDBを入れる

$ yum update
$ yum install mariadb mariadb-server
$ systemctl start mariadb
$ systemctl enable mariadb

MySQL用のJDBCドライバーをダウンロード・配置

参考: 【jmeter】【MySQL】MySQLからデータを取得し、変数に格納する - たんたんめん日記

MySQL :: Download Connector/J から zipパッケージをダウンロードして展開、 mysql-connector-java-5.1.40-bin.jarapache-jmeter-3.0/lib に入れる。

1つのRDBに負荷をかける

f:id:nwpct1:20161118173948p:plain

f:id:nwpct1:20161118174006p:plain

f:id:nwpct1:20161118174021p:plain

うまくいくとこのようになる。権限周りでちょっとはまりましたが、「結果をツリーで表示」からレスポンスをみて修正。

複数のDBに対してロードバランス

レプリケーションをしていて、マスタや複数のスレーブに対してリクエストを分散させたい場合、

jdbc:mysql:loadbalance://<FQDN or IP address>:<port>,<FQDN or IP address>:<port>/<DB name>

JMeter Server

複数台のPCからリクエストを投げる。 下の記事の通りやったら問題なく動いた。 zipパッケージの中に jmeter-serverとかも最初から入ってて、j

複数台のJMeterサーバで負荷試験を行う方法 | Check!Site

f:id:nwpct1:20161118182140p:plain

テスト計画の保存

ファイルメニューからテスト計画を保存できる。 XML形式で保存されているので、構造もそれほど複雑ではない。 プログラムとかExcelマクロで生成できそう。

キャプチャ

JMeter Proxy Serverを経由することで、実際のユーザ−の行動からリクエストをキャプチャーしたりできる。

CUI

試してないけど、 *.jmx で保存して bin/jmeter.bat から実行出来るらしい。 自動化するならこっちのほうが大事そう。

おわりに

気が向いたら今度、グラフとかレポートがリッチらしいGatlingも使ってみたい。

詳解 システム・パフォーマンス

詳解 システム・パフォーマンス