<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tmty.jp &#187; StressTest</title>
	<atom:link href="http://tmty.jp/tag/stresstest/feed/" rel="self" type="application/rss+xml" />
	<link>http://tmty.jp</link>
	<description>tmtysk が前よりも更新しなくなってしまっているブログ</description>
	<lastBuildDate>Thu, 15 Dec 2011 16:17:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
<link rel="http://api.friendfeed.com/2008/03#sup" xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://friendfeed.com/api/public-sup.json#fdff53faaa"/>		<item>
		<title>Amazon EC2からWebサービスへの大規模なアクセス負荷試験を行う方法（JMeter in the Cloudを使用）</title>
		<link>http://tmty.jp/2010/04/23/performance_tuning_with_jmeter_in_the_cloud/</link>
		<comments>http://tmty.jp/2010/04/23/performance_tuning_with_jmeter_in_the_cloud/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 16:55:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[LoadTest]]></category>
		<category><![CDATA[PerformanceTuning]]></category>
		<category><![CDATA[StressTest]]></category>
		<category><![CDATA[Test]]></category>

		<guid isPermaLink="false">http://tmty.jp/?p=349</guid>
		<description><![CDATA[初期投資を抑えつつサーバインフラを手軽に拡大/縮小できる、いわゆるクラウドサービスが人気みたいです。Amazon EC2 みたいなやつ。聞くところによると、ソーシャルアプリなどは、アクセス規模とかユーザの増加傾向が見積り [...]]]></description>
			<content:encoded><![CDATA[<span class="read_later"><script type="text/javascript"><!--
			instapaper_embed( "http://tmty.jp/2010/04/23/performance_tuning_with_jmeter_in_the_cloud/", "Amazon EC2からWebサービスへの大規模なアクセス負荷試験を行う方法（JMeter in the Cloudを使用）", "" );
		//--></script></span><p>初期投資を抑えつつサーバインフラを手軽に拡大/縮小できる、いわゆるクラウドサービスが人気みたいです。Amazon EC2 みたいなやつ。聞くところによると、ソーシャルアプリなどは、アクセス規模とかユーザの増加傾向が見積りにくいようで、そういうところで利用が進んでいるらしいです。</p>
<p>ところで、そういったサービスは、何もサービスを受け付ける側を作るのに使うだけでなく、（負荷試験やパフォーマンスチューニングのための）Web アクセス負荷を大量に発生させるインフラとしても使えるんでないかなあと思っていたら、やっぱりそういうモノがありました。JMeter in the Cloud という AMI (Amazon Machine Image) です。</p>
<p><a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2924" target="_blank">JMeter In The Cloud &#8211; A cloud based load testing environment</a></p>
<p>元々 JMeter では、複数のホストに JMeter を入れておき、JMeter Master/Slave という構成をとることで、Master から複数の Slave に対してテストシナリオ（テストプラン）の実行を指示することができるようになっています（下記リンク参照）。ですが、上のリンクで紹介されている AMI を使うと、JMeter を使った（超高負荷を発生させる）分散負荷テスト実行環境を、Amazon EC2 上に、驚くほど簡単に（慣れれば10分もかからずに）構築できます。同時10,000接続とか、それ以上のリクエスト環境をサクッと作れちゃいます。</p>
<p>参考:</p>
<ul>
<li><a href="http://jakarta.apache.org/jmeter/" target="_blank">Apache JMeter</a></li>
<li><a href="http://jakarta.apache.org/jmeter/usermanual/jmeter_distributed_testing_step_by_step.pdf" target="_blank">JMeterによる分散環境でのテスト（PDF）</a></li>
</ul>
<p>使い方は、上に書いた AMI 紹介ページに、PDF が置いてあるので、それを読めばわかります。とても簡単。以下、その PDF に書いてあることを試したので、そのログをそのまま紹介します。</p>
<h4><span style="font-weight: normal;">注意</span></h4>
<p>以下の手順では、簡単に膨大な量のアクセス負荷を発生させることができます。悪用厳禁はもちろんですが、たとえば、単体ホストから  JMeter  や ab などを使う程度の負荷で音を上げるような状況のサービスの負荷試験には向きません。下手に大量のトラフィックを発生させることは、第三者に迷惑をかけることもありますので、利用にはご注意ください。</p>
<h4><span style="font-weight: normal;">前提知識</span></h4>
<p>というほどではないですが、適当に端折りますので、以下の経験があったほうがいいかもしれません。</p>
<ul>
<li>EC2でインスタンスを起動したり、管理コンソールをいじってみたりしたことがある</li>
<li>JMeterを使ったテストシナリオの作成＆実行をやってみたことがある</li>
</ul>
<h4><span style="font-weight: normal;">準備するもの</span></h4>
<ul>
<li>AWSアカウント</li>
<li>NXクライアントソフト（後述）</li>
<li>負荷試験対象となるサービス</li>
<li>お金（EC2でインスタンスを起動してる時間に応じてかかる。1インスタンスあたり0.085USD~/h）</li>
</ul>
<h4><span style="font-weight: normal;">概要</span></h4>
<p>JMeter in the Cloud は、<a href="http://www.jk-itberatung.de/" target="_blank">ドイツのIT Beratung Jörg KalsbachというITコンサルティング会社</a>の方が公開している AMI です。このイメージの正体は JMeter In The Cloud というデスクトップアプリケーションがインストールされた Ubuntu (8.10) です。このイメージを使うことで JMeter を分散環境で利用しようというわけですが、全体の流れは以下のようになります。</p>
<ol>
<li>上記イメージを EC2 で起動します</li>
<li>起動したホストに、この後紹介する NX クライアントソフトで接続すると、リモートで X Window System のデスクトップ環境が利用できます</li>
<li>デスクトップに置かれた JMeter In The Cloud というアプリを起動し、JMeter Slave となるインスタンス数と AWS のアクセスキー＆秘密鍵を指定します</li>
<li>JMeter Slave ホストが指定数分起動し、リモート利用設定がなされた状態で JMeter GUI が起動してきます</li>
<li>起動した JMeter GUI でテストプランを設計し、Remote Start All などとすることで、JMeter Slave に対して一斉テストを指示します</li>
</ol>
<p>以下、スクリーンショットぺたぺたしながら紹介します。</p>
<h4><span style="font-weight: normal;">実行の流れ</span></h4>
<h5><span style="font-weight: normal;">NXクライアントソフトのインストール</span></h5>
<p>NXというのは、今回初めて知ったのですが、X Window System をネットワーク越しに利用するためのテクノロジで、VNC と同じようなものだと思うのですが、比較的狭いネットワーク帯域（遅い転送速度）でも利用できるのが特徴らしいです。紹介したものの、<a href="http://en.wikipedia.org/wiki/NX_technology" target="_blank">Wikipedia に書いてある</a>ことを引用しただけで、それ以上のことはよくわかりません。冒頭紹介したリンク先にあるマニュアルで、この技術の開発元である <a href="http://www.nomachine.com/index.php" target="_blank">NoMachine</a>（イタリアの会社らしい） が紹介されています。というわけで、そこのリンク先（以下）から NX クライアントソフトをダウンロードして、インストールします。</p>
<p><a href="http://www.nomachine.com/download.php" target="_blank">NX Download &#8211; NoMachine</a></p>
<p><img class="alignnone size-full wp-image-350" title="Screenshot-8" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-8.png" alt="Screenshot-8" width="554" height="659" /></p>
<p>NX Client Products というところから、利用環境に合わせてダウンロード＆インストールします。僕は Mac OS X(10.5)版と Linux(DEBパッケージ)版を試してみましたが両方問題なく使えました。</p>
<h5><span style="font-weight: normal;">EC2でのSecurity Group設定</span></h5>
<p>次に、ブラウザで AWS の管理コンソールに接続し、Security Group を作成します。Security Group というのは、複数のインスタンスの集合単位で、これを設定しておくと、グループの内外でネットワークレベルでのアクセス制御ができたりします。作成済みの Security Groups は管理コンソールの左側のメニューから一覧できます。（今回紹介している JMeter in the Cloud は US East か EU West の Region でしか使えないみたいです。できれば US West で使いたいですが、今のところ調べきれてません。。）</p>
<p><img class="alignnone size-full wp-image-352" title="Screenshot-6" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-61.png" alt="Screenshot-6" width="629" height="437" /></p>
<p>JMeter in the Cloud では、&#8221;All Incoming&#8221; という名前の Security Group を決め打ちで要求しているので、上の方にある &#8220;Create Security Group&#8221; で、グループ作成します。</p>
<p><img class="alignnone size-full wp-image-353" title="Screenshot-7" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-7.png" alt="Screenshot-7" width="476" height="244" /></p>
<p>ここでは、Descriptionは上のように書いてますが、何でもOK。</p>
<h5><span style="font-weight: normal;">JMeter in the Cloud イメージ起動</span></h5>
<p>では、JMeter Master となるメインのインスタンスを起動します。</p>
<p><img class="alignnone size-full wp-image-354" title="Screenshot-3" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-3.png" alt="Screenshot-3" width="490" height="269" /></p>
<p>&#8220;Launch Instance&#8221; のメニューから、Community AMIs のタブで、AMI を検索します。US East であれば ami-0cf21065、EU West であれば ami-9b9fb4ef で検索してください。見つかったイメージの右側の &#8220;Select&#8221; ボタンから起動していきます。いろいろ起動オプション選べますので変えたい場合は変えてください。適当にぽちぽち進んでいけば OK。</p>
<p><img class="alignnone size-full wp-image-355" title="Screenshot-4" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-4.png" alt="Screenshot-4" width="573" height="389" /></p>
<p><img class="alignnone size-full wp-image-356" title="Screenshot-14" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-14.png" alt="Screenshot-14" width="561" height="385" /></p>
<p><img class="alignnone size-full wp-image-357" title="Screenshot-15" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-15.png" alt="Screenshot-15" width="560" height="385" /></p>
<p>Security Groups は、さっき作成した All Incoming でもいいんですが、その場合、All Incoming のネットワークポリシをちょっといじってやる必要があるみたいです。そのままだと、この後の NX クライアントからの接続がうまくいきません。マニュアルには TCP 22,80,1099 と UDP 161 をあけろ、と書いてあるので、多分、これでしょう（試してない）。僕は、上の図のとおり Default を選択しました。</p>
<p>この後、確認画面が出て、ボタンを押すと、インスタンスが起動します。ここから時間課金です。こういうのに、未だにドキドキしてしまう。</p>
<p>起動したら、My Instances 一覧画面で割り当てられた FQDN 名をチェックしておきましょう。この後の接続先設定に使用します。</p>
<p><img class="alignnone size-full wp-image-359" title="Screenshot-10" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-10.png" alt="Screenshot-10" width="546" height="335" /></p>
<h5><span style="font-weight: normal;">起動したイメージへの接続</span></h5>
<p>既に説明したとおり、起動したイメージへは NX クライアントを使用します。先ほどインストールした NX Client を起動して、まずは接続（セッション）設定を作成します。</p>
<p><img class="alignnone size-full wp-image-358" title="Screenshot-9" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-9.png" alt="Screenshot-9" width="505" height="382" /></p>
<p><img class="alignnone size-full wp-image-360" title="Screenshot-11" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-11.png" alt="Screenshot-11" width="501" height="381" /></p>
<p>セッション名は適当です。接続先ホストには、先ほどチェックした起動済みインスタンスの FQDN 名を指定します。</p>
<p><img class="alignnone size-full wp-image-361" title="Screenshot-12" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-12.png" alt="Screenshot-12" width="502" height="382" /></p>
<p>このあとの画面で Finish すれば、接続先作成は完了。この設定を使って、EC2 上で起動しているリモートのインスタンスにログインします。</p>
<p><img class="alignnone size-full wp-image-362" title="Screenshot-13" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-13.png" alt="Screenshot-13" width="330" height="213" /></p>
<p>起動済みインスタンスは、ログインユーザ/パスワードが作成済みです。ともに jmeter と指定すればログインできます。</p>
<p><img class="alignnone size-full wp-image-363" title="Screenshot-17" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-17.png" alt="Screenshot-17" width="604" height="356" /></p>
<p>こんな感じで、リモートマシンのデスクトップが手元にやってきます。EC2 でデスクトップ環境を動かしたのが初めて（いつもは CLI しか使用しない）なので、これが US East で動いてるとおもうと、なぜだか感動。</p>
<h5><span style="font-weight: normal;">JMeter In The Cloud アプリの起動</span></h5>
<p>上のデスクトップに置いてあるアプリを起動すると、JMeter Slave として起動するインスタンス数と、AWS のアクセスキー/秘密鍵を入れるダイアログが表示されます。このアプリを介して、JMeter Slave インスタンスを起動する、というわけです。</p>
<p><img class="alignnone size-full wp-image-365" title="Screenshot-18" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-18.png" alt="Screenshot-18" width="427" height="215" /></p>
<p>ここで起動させるインスタンスは m1.small タイプ（$0.085/hour）になります。Number of Instances to start は、起動するインスタンス数。10って入れたら10個起動します。課金スピードは10倍です。ちなみに、AWS key やら AWS secret key にはコピー＆ペーストしたいところですが、リモート接続してるデスクトップなので、ローカル環境からはコピーしてこれません。僕は Firefox 起動して AWS アカウント管理画面に接続して、そこからこぴぺしました。なんかでクリップボード共有もできたような気がしたけど忘れた。</p>
<p><img class="alignnone size-full wp-image-367" title="Screenshot-19" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-19.png" alt="Screenshot-19" width="561" height="130" /></p>
<p>起動にはだいたい2分くらいかかるよ、と出ます。が、起動した数量によっては、もっとかかります。あと、先ほど AWS の管理コンソールから作成した &#8220;All Incoming&#8221; Security Group が無いと、ここでエラーが出ます。</p>
<p><img class="alignnone size-full wp-image-368" title="Screenshot-21" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-21.png" alt="Screenshot-21" width="560" height="325" /></p>
<p>うまく起動すれば、こんな感じに、JMeter の GUI が表示されてきます。やった！</p>
<p><img class="alignnone size-full wp-image-369" title="Screenshot-22" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-22.png" alt="Screenshot-22" width="589" height="430" /></p>
<p>リモートホスト（JMeter Slave）に先ほど指定した10個のホストが登録されていることもわかります。</p>
<p>起動後に、AWS の管理コンソールで My Instances をみると、ばっちり起動しまくっています。これらは、上で起動した JMeter を動かしている限り動きつづけます。</p>
<p><img class="alignnone size-full wp-image-366" title="Screenshot-20" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-20.png" alt="Screenshot-20" width="582" height="239" /></p>
<h5><span style="font-weight: normal;">JMeter でテストプラン作成＆実行</span></h5>
<p>あとは、JMeter そのものの使い方になるので、マニュアルとか他の解説サイトを参考にしてください。以下は、僕の管理している某サーバに HTTP GET を 10 Threads, 10 Loop で発行するスレッドグループを作成して、これを Remote Start All したときの Graph Result です。10 インスタンス起動しているので、10 x 10 x 10 で 1,000 リクエストが飛んでいます。</p>
<p><img class="alignnone size-full wp-image-370" title="Screenshot-23" src="http://tmty.jp/wp-content/uploads/2010/04/Screenshot-23.png" alt="Screenshot-23" width="560" height="323" /></p>
<p>JMeter は、テストシナリオをかなり細かく設定していけますし、乱数発生やif分岐、foreachループなどちょっとしたスクリプティングもできてしまうので便利ですね。リポート形式もいろいろあるのもありがたいです。</p>
<p>細かいプランはローカルマシンの GUI で作って xml 出力しておいて scp で運んでも良いと思います。ブラウザが使えるので、その辺のファイルの共有は、Dropbox など使うのもアリかも。</p>
<p>テストが終わったら、忘れずにインスタンスをシャットダウンしておきましょう。リモート起動した JMeter Slave は、ここで起動した JMeter GUI を終了することで、終了処理がコールされるようになっています。</p>
<h4><span style="font-weight: normal;">まとめ</span></h4>
<p>JMeter in the Cloud 便利だな！という話でした。これがパブリックイメージで無償で利用できるというのは驚きです（寄付歓迎とのこと）。いつ有償になってしまうか、突然請求書が届いたりしないか不安ですが。。</p>
<p>しかし、こんなかんじで、数時間負荷をかけるための利用であれば、10,000円でお釣りが来てしまうくらいなんですね。便利な時代になったものです。</p>
<p>（2010/05/04追記: Amazonから先月利用分の請求書が来ましたが、このために利用した分の請求額は $2.28 でした。2, 3 の負荷テストを実験してみたり、このエントリ書くために 1, 2 時間起動しっぱなしでキャプチャとったりしてましたが、概ね、こんなものですね。安い！）<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2009/04/07/android-event/" rel="bookmark" title="2009 年 4 月 7 日">Android勉強会に行ってきた(090406)</a></li>
<li><a href="http://tmty.jp/2009/03/22/android-hackathon/" rel="bookmark" title="2009 年 3 月 22 日">Android Hackathon に参加してきた</a></li>
<li><a href="http://tmty.jp/2007/01/12/comet%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e3%81%a3%e3%81%a6%e3%82%b3%e3%83%8d%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86%e3%81%a9%e3%81%86%e3%81%aa%e3%81%a3%e3%81%a6/" rel="bookmark" title="2007 年 1 月 12 日">Cometクライアントってコネクション管理どうなってんの</a></li>
</ul>
<p><!-- Similar Posts took 33.629 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2010/04/23/performance_tuning_with_jmeter_in_the_cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.845 seconds -->

