harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

dev network web レビュー

TsungでWebサイトの負荷テストを試す

投稿日:2015年6月13日

Last Updated on 2021年7月4日 by かんりにん

 
Tsung(読み方が不明なんだけど、サン、あるいはサング、かな??)を試したログ。
haproxyとバックエンドサーバーへの負荷テストにあたって、目安のため1000リクエスト/秒くらいから負荷テストを試したいな、と思い
今回は普段利用しているab(apache bench)、httperf、siege、JMeterに加えてTsungを入れてみた、のログ。
実行環境としてErlang(アーラン)を採用している、とのこと。

参考:お世話になっております!

Tsung公式サイト
Tsung公式サイト マニュアル
How to Generate Millions of HTTP Requests
サーバの負荷テストのための、何百万ものHTTPリクエストを発生させる方法
※上記ブログの日本語訳(postd)

負荷テストツールということもあり。導入するならクライアント端末に、とも考えられるが
Mac、Linux環境(ソースから入れるならBSDも)は情報があるものの、Windows環境は過去(2009年ころ)は対応していた様子ながら、ここ数年の対応状況について情報不足なので、今回はひとまずLinux環境で試してみることに。(あと、すぐに使えるMac環境が今無いので!)

Contents

1)インストール、Linux(CentOS)

本家サイトのinstallationのページを参考に環境を整備。

参考:依存関係にあるモジュール

Erlang/OTP R13B and up (download). Erlang is now part of Fedora and Debian/Ubuntu repositories.
pgsql module
mysql module
ldap module (for the LDAP plugin):
mochiweb libs (for XPath parsing, optionally used for dynamic variables in the HTTP plugin):
gnuplot and perl5
python and mathplotlib (optional; for graphical output with tsung-plotter).

tsungのインストール(RPM)

CentOS6.6のepelにて、tsungと実行環境であるerlangを両方まとめてインストールOK。
今回インストールされるバージョンはtsung-1.5.1-2.el6.x86_64。

	# yum search tsung
	Loaded plugins: security
	rightscale-epel                                                         | 2.9 kB     00:00
	epel/pkgtags                                                            | 1.5 MB     00:03
	=================================== N/S Matched: tsung ===================================
	tsung.x86_64 : A distributed multi-protocol load testing tool

	# yum install tsung

※ソースにて最新版を利用する場合は以下から。
http://tsung.erlang-projects.org/dist/

2)tsungの設定

インストールパッケージにサンプルファイル(xml)が用意されている。
場所は/usr/share/doc/tsung-<バージョン>/examples以下にあるので、このうちhttp_simple.xmlを実行ユーザーのホームディレクトリに.tsung/tsung.xmlとしてコピーする。

	$ mkdir ~/.tsung
	$ cp -a /usr/share/doc/tsung-1.5.1/examples/http_simple.xml ~/.tsung/

テスト用xmlの作成

	$ cd ~/.tsung
	$ cp -p http_simple.xml tsung.xml
	$ vi tsung.xml

 

xml設定例

公式マニュアルを参考に、簡単なXMLを。
HTTP/HTTPSだけでなく、MySQLやPostgreSQLへのリクエスト、WebSocketでのリクエストなど
多岐にわたるオプションがあり、様々なシナリオを作成できる印象。
詳しくはこちら→http://tsung.erlang-projects.org/user_manual/configuration.html

テスト用に作成したサンプル

	<?xml version="1.0"?><tsung loglevel="notice" version="1.0">
	
	  <clients>
	    <client host="localhost" use_controller_vm="true" weight="1" cpu="1" maxusers="10000"/>
	  </clients>
	
	  <servers>
	  <server host="<テスト対象サーバーのURLないしIPアドレス>" port="80" type="tcp"/>
	</servers>
	
	  <load>
	  <arrivalphase phase="1" duration="2" unit="minute">
	     <users maxnumber="7200" arrivalrate="100" unit="second"/>
	   </arrivalphase>
	  </load>
	
	  <options>
	   <option type="ts_http" name="user_agent">
	    <user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 tsung from N.verginia</user_agent>
	    <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 tsung from N.verginia</user_agent>
	   </option>
	  </options>
	
	  <sessions>
	  <session name="http-example" probability="100" type="ts_http">
	
	    <request> <http url="/" method="GET" version="1.1"/> </request>
	    <thinktime value="20" random="true"/>
	
	    <request> <http url="/index.php" method="GET" version="1.1"/> </request>
	
	  </session>
	 </sessions>
	</tsung>


タグの説明

今回テスト用に作成したxmlで使用したタグを抜粋。

clientsタグ
テストを実行する側(tsung実行ホスト)の設定

serversタグ
テスト対象サーバーの設定

loadタグ
テスト対象サーバーへのarrivalphaseタグ以下で設定。

duration 連続実行時間(単位:分)
maxnumber 最大リクエスト数
arrivalrate 秒あたりの同時リクエスト数

optionsタグ
TCPタイムアウト、HTTPメソッドでUserAgentの指定などが可能。
詳しくはこちら→http://tsung.erlang-projects.org/user_manual/conf-options.html

sessionsタグ
詳しくはこちら→http://tsung.erlang-projects.org/user_manual/conf-sessions.html
リクエストページやメソッドの指定、SSLでの接続(STARTTLS)やベーシック認証の設定など。

3)tsungの実行

xmlファイルを編集後、tsungを実行。

1.tsung実行

	$ tsung start
	Starting Tsung
	"Log directory is: /home/user/.tsung/log/20150612-1939"

2.実行後に作成されたファイルを確認

	$ ls -al /home/user/.tsung/log/20150612-1939
	total 48
	drwxrwxr-x  2 user user  4096 Jun 12 19:39 .
	drwxrwxr-x 16 user user  4096 Jun 12 19:39 ..
	-rw-rw-r--  1 user user    62 Jun 12 19:39 match.log
	-rw-rw-r--  1 user user 25438 Jun 12 19:39 tsung.log
	-rw-rw-r--  1 user user  1080 Jun 12 19:39 tsung.xml
	-rw-rw-r--  1 user user  3573 Jun 12 19:39 tsung_controller@ip-172-16-1-234.log

3.レポートページを生成

作成されたファイルをもとに、tsung_stats.plを実行してページを生成してみる。
実行の際、gnuplot、gnuplot-commonとperlモジュールのTemplate.pmが必要なので、入ってない場合は先に入れておく。

4.tsung_stats.pl実行

	$ perl /usr/lib64/tsung/bin/tsung_stats.pl
	creating subdirectory data
	creating subdirectory gnuplot_scripts
	creating subdirectory images
	No data for Bosh
	No data for Match
	No data for Event
	No data for Async

作成されたファイルを確認。
このうち、htmlとして生成された”report.html”と”graph.html”が負荷テスト結果を確認するページとなる。
“No data for~”といろいろ出てるけど、詳細は後日。ひとまず作成されたファイルを確認し、ページを見てみる。

	$ ls -al
	total 88
	drwxrwxr-x  5 user user  4096 Jun 12 19:42 .
	drwxrwxr-x 16 user user  4096 Jun 12 19:42 ..
	drwxrwxr-x  2 user user  4096 Jun 12 19:42 data
	-rw-rw-r--  1 user user  5212 Jun 12 19:42 gnuplot.log
	drwxrwxr-x  2 user user  4096 Jun 12 19:42 gnuplot_scripts
	-rw-rw-r--  1 user user  7626 Jun 12 19:42 graph.html
	drwxrwxr-x  2 user user  4096 Jun 12 19:42 images
	-rw-rw-r--  1 user user    62 Jun 12 19:39 match.log
	-rw-rw-r--  1 user user  9512 Jun 12 19:42 report.html
	-rw-rw-r--  1 user user 25438 Jun 12 19:39 tsung.log
	-rw-rw-r--  1 user user  1080 Jun 12 19:39 tsung.xml
	-rw-rw-r--  1 user user  3573 Jun 12 19:39 tsung_controller@ip-172-16-1-234.log

作成されたファイルを閲覧するため、レポート作成サーバーのドキュメントルートへコピーすればOK。
以下は/var/www/html/へコピー。

# cp -a /home/user/.tsung/log/20150612-1939 /var/www/html/

4)レポートを見てみる

視覚化されたレポートを見てみると…

レポートページのURLはこんな感じ。
http://hogehoge.example.com/20150612-1939/report.html

report.html

report.html

グラフページは以下のような感じで。
http://hogehoge.example.com/20150612-1939/graph.html

graph.html

graph.html

グラフは個別にpngで生成されているので、クリックすると拡大画像を確認可能。

グラフ拡大(Transactions-mean.png)

グラフ拡大(Transactions-mean.png)

テスト環境かつ、まったく調整してないので負荷テストの結果としてはこんなもんか、といったところだけど、レポーティングとしてはなかなか面白く、かつチューニングのポイントを押さえやすそう。
設定オプションも多数あるので、これから整備して今後のサービス立ち上げの際に活用していこうかな。あとはtsung_stats.pl実行時にズラズラ出てきた”No data for~”がなんなのかを調べておこうかと(という独り言w)
 

 

-dev, network, web, レビュー
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

[買い物]Lenovo ThinkPad Edge E420 [かるくレビュー]

なんと約8年ぶりにパソコンを買い換えました。用途は自分のではなく、女房のPC! GW前に登場した、ThinkPadのエントリーモデル、E420です。 直販ショップでのBTOモデルの購入ですが、スペック …

no image

[Juniper]SRX220 J-Webのトラブルシュートと設定変更

SRX220のJ-Webへログインできなくなっちゃったときのトラブルシュート。 J-Webを使ってSRXの設定変更をしていた際、誤ってログアウトせずにブラウザを閉じてしまい、再度アクセスをしたところ、 …

[レビュー]Lenovo IdeaPad Yoga 13 その1

前回レビューをしたThinkPad X1 Carbonから2週間ほど間をおき、第二弾としてIdeaPad Yoga 13をお借りしました! 04/06から2週間のレビューとなります! 実は、このモデル …

Linux環境でのgoogle driveクライアントをいろいろと下調べ

  これまでずっとdropbox.pyを利用してサーバーの設定ファイル、DBバックアップをDropboxにアップしたりといろいろやってきたが、無料プランでの容量の限界が近づいてきたので、サーバーのバッ …

[レビュー]ThinkPad X230 SSDモデル(2325-HS4)

職場の自分PCにX230が加わったので、ざざっとレビューを書いてみました。 型番は2325-HS4という、SSDモデルです。外箱を見たところ、2012年09月製造とのこと。 やはり最大の関心ごとはキー …