gatling
Page content
webのストレステストのツールで、 jmeter よりも色々できるらしいもの。
Gatling の特徴
scalaで様々なシナリオを書くことが出来、レポート、ログ機能も充実している。インストールは簡単で、 zip を持ってきて展開するだけですぐ使える。
何ができそう・出来たか
- post, get, delete などをつなげることができる
- rps (request/second) の調整や実行時間を設定できるだけでなく、 ramp up も可能 (ある rps から始めて 一定時間で線形にレートを増やし、ある rps まで到達させる、など
- レポートは直下の
reports
ディレクトリにできて、 index.html にアクセスすれば、 highcharts を使った美しいグラフで充実のレポートを閲覧可能。
setup
AMI の設定ログ
sudo yum remove -y java-1.7.0-openjdk-1.7.0.201-2.6.16.0.78.amzn1.x86_64
sudo yum update -y
sudo yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
sudo yum clean all
cd ~/
wget https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/2.3.1/gatling-charts-highcharts-bundle-2.3.1-bundle.zip && \
unzip gatling-charts-highcharts-bundle-2.3.1-bundle.zip && \
mv -f gatling-charts-highcharts-bundle-2.3.1 gatling
設定箇所
ディレクトリツリー
gatling ├── bin ├── conf │ ├── logback.xml # debug log setting │ └── gatling.conf # performance tuning ├── lib │ └── zinc ├── results │ └── my-scenario1-1528429451035 # generated result html items │ ├── index.html │ ├── js │ └── style ├── target │ └── test-classes │ └── computerdatabase │ └── advanced └── user-files ├── bodies ├── data │ └── mydata.csv # input parameters ├── log └── simulations ├── myproject # scala scenario └── computerdatabase └── advanced
gatling.conf
- gatling > http > ahc > requestTimeout あたりが GET リクエストの待ち時間かなぁ(結局まだ触ったこと無い)
実行方法
詳細リファレンス: command line option
-s
で自分のシナリオを指定できます$ cd gatling $ ./bin/gatling.sh -s computerdatabase.MySimulation
クラス名はシナリオファイルの先頭の方を見ればわかる。以下の例なら
computerdatabase.my_test_24h
:package computerdatabase import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class my_test_24h extends Simulation { ... }
チューニング
エラー時のreq/res出力: logback.xml を覗くと、エラーのときだけrequest, responseを出力してくれる設定がコメントアウトされているから、それ使ってデバッグ出力だった。 (参考は公式: Debugging – Gatling Open-Source Load Testing Documentation)
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern> </encoder> <immediateFlush>false</immediateFlush> </appender> <!-- uncomment and set to DEBUG to log all failing HTTP requests --> <!-- uncomment and set to TRACE to log all HTTP requests --> <!-- <logger name="io.gatling.http.engine.response" level="DEBUG" /> --> ここを uncomment するのと、 DEBUG か TRACE に変更 <root level="WARN"> <appender-ref ref="CONSOLE" /> </root> </configuration>
- 解説
- 確認したバージョン: 2.3.1 -> 3.3.1 で変わったようなので、 3.3.1 で確認した。
- logger タグ: 以下の level に応じて出力レベルを変える
- DEBUG: エラー時の req/res を出力
- TRACE: すべての req/res を出力
- appender タグ
- コンソールに 標準出力(標準エラー出力?)として出す(デフォルト) か ファイルに出すかなどが指定できる
- root タグ: ここで appender-ref で正しく appender を参照するひつようがあるそうです(雑
- 解説
ソケット枯渇・ファイルディスクリプタ枯渇対策のチューニング: https://qiita.com/shokos@github/items/78d994d6673d8eb44348
timeout 値の チューニング:
conf/gatling.conf
にて複数台に scale out する方法: まだ手動だが公式参照