tsungとは
オープンソースのマルチプロトコルの手軽に利用できる分散負荷テストツールです。読み方は、つんぐです。シンプルに設定することができるので、誰でも簡単に負荷テストを実施することができます。負荷対象が単一のターゲットであれば、10分以内にすぐに負荷テストを開始できます。負荷テストといえば、jmeterが有名ですが、シンプルで簡単に操作できて、コマンドラインベースで作業することができますので、最近は負荷テスト時に、こちらを使うことが私は多いです。
tsungのメリット
- 負荷をかける側の必要スペックが低い(単一のターゲットに対して、負荷をかけることに特化しているため)
- HTMLのレポートが作れる
- 負荷調整がしやすい(クライアント側のインスタンスを増やせば、さくっと増やせられる)
- yum install可能(手軽に実行できます)
このようなメリットがあると思います。環境は、GCPでもAWSでも特に拘らずに構築できますので、ご自身の好きな環境で試せます。
tsungの設定
インストール方法
- インストール
$ yum -y install epel-release
$ yum -y install tsung
$ yum -y install gnuplot gnuplot-common
$ yum -y install perl-Template-Toolkit
$ yum -y update glib2
$ mkdir ~/.tsung
$ vi ~/.tsung/tsung.xml
~/.tsung/tsung.xmlは、tsungの設定ファイルになりますので、ここに負荷のかけ方を指定していきます。
- インストールされたかを確認
$ tsung -v
Tsung version 1.7.0
インストールされたことが確認できました。
設定
- 前提条件
・負荷をかけるサーバ(適当なサーバにする、まずは低スペックサーバでいい)
↓
↓ (負荷をかけるサーバからリクエストを送ります)
↓
・負荷をかけられるサーバ(利用中のサーバ、本番で想定しているスペックにする) -
設定内容
下記のように設定ファイルを書いていきます。設定方法を詳しく見たい方は、こちらを参照ください。公式ドキュメントになります。
http://tsung.erlang-projects.org/user_manual/conf-file.html
$ vi ~/.tsung/tsung.xml
<tsung loglevel="notice" version="1.0">
<clients>
<client host='localhost' maxusers="300000" use_controller_vm="true" weight="1" cpu="1" />
</clients>
<servers>
<server host="xxxxxxxxxx.com[負荷対象サーバ]" port="80" type="tcp" weight="1" />
</servers>
<load>
<arrivalphase phase="1" duration="5" unit="second">
<users maxnumber="10000000" arrivalrate="10" unit="minute"/>
</arrivalphase>
</load>
<options>
<option type="ts_http" name="user_agent">
<user_agent probability="80">Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1</user_agent>
<user_agent probability="20">Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/69.0.3497.91 Mobile/15E148 Safari/605.1</user_agent>
</option>
</options>
</tsung>
上記のように設定すると、5000リクエスト/秒が5分ほど発生します。
<設定項目>
・clients
- host: クライアントに使うサーバ
- maxuser: このクライアントが走らせる最大ユーザー数
・servers
- host: 負荷がかかるサーバのIP
・load
- phase: 1つ目に動かす設定、phase=”2″など書いて増やしていくことができる
- duration: 何秒間アクセスし続けるか
- arrivalrate: 1回ごとに増えるユーザ数の最大数
- unit: 増やすスパン、毎秒(second)とか毎分(minute)とかを設定できます
- maxnumber: 最大アクセス数を設定します。「毎unitごとにarrivalrateずつアクセスが増える、アクセス数が maxnumberに達するか時間がdurationに達する」と終了になります。
・options
- user_agent: アクセスさせる時のUA
- probability: アクセスするUAの確率、合計で100にして使う。例えば、20,30,50のように3種類のuaを割合を変えて使うことができる。
tsungの操作方法
tsungを実行
$ cd ~/.tsung/ && tsung start
tsung配下に移動して、tsung startで実行することができます。
レポート作成
$ cd ~/.tsung/log/20200801-0001/
$ perl /usr/lib64/tsung/bin/tsung_stats.pl
実行後に、負荷テスト結果がどうだったのかレポートを作成します。
レポートを確認
HTTPのレスポンスコードを確認
リクエストを投げた結果、HTTPのレスポンスコードがどうだったかを確認することができます。上記の結果では、合計のリクエスト数が128,825件で、全て200で返ってきており、1番捌けたケースで1秒あたり444.6件、平均で1秒あたり417.88件の結果になりました。
統計情報を確認
どの処理にどのくらい時間がかかっていたかを見ることができます。1番捌けていたときと平均を見ることができ、connect, page, request, sessionで分けて表示をしてくれています。
レスポンスタイムを確認
負荷テストを始めてからのレスポンスタイムの推移を確認することができます。今回のテストでは、大きく変動なく、9秒前後で推移する結果になりました。
サーバのステータスを確認
負荷テストを始めてからのCPUの使用率とメモリの状況をグラフ化しています。今回のテストだと、CPUは大きく問題なく推移しておりますが、メモリは、100秒経過してから少し使用量が増えていることがわかります。