kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Visual Studio Team Servicesを使ってWebサイトの負荷を簡単に計測する(17日目)

はじめに

Webサイトをリリースして、著名なメディアに取り上げられるなどの何らかの事情で、突発的にアクセスが増えてダウンした、ということはよくあります。そういうことがなくても、導入の要件で最低アクセス人数を指定されているということもよくあります。

Visual Studioの負荷テスト機能をはじめ、Load Runnerなどの商用製品やjmeterのオープンソースのツールを使うこともあるでしょう。VSTSはクラウドサービスらしく、Azureのデータセンターから負荷をかけるという機能があります。

何度か@ITなどで紹介したこともありますが、さらに進化を遂げています。今日は簡単なURLを指定して負荷をかける機能を紹介します。

URLベースのシナリオを作成する

f:id:kkamegawa:20161216202634p:plain

Load Testをクリックすると、初期画面が表示されます。今日紹介するのはURLとhttp archiveです。

f:id:kkamegawa:20161216202633p:plain

右から二番目にあるURLの下にあるCreate testをクリックすると、シナリオ作成画面になります。

アクセスをかけるURLおよび、httpヘッダ、クエリパラメータを指定します。

f:id:kkamegawa:20161216202636p:plain

こんな風にトップページ、About, ContactのURLを順番にアクセスするというシナリオを作りました。

f:id:kkamegawa:20161216202637p:plain

Settingsで負荷の設定を行います。

  • Run duration:負荷をかける時間です
  • Load pattern:均等にかける(Constant)、徐々に上げる(step)
  • Max vusers:シナリオにおける最大ユーザーです。20000ユーザー/月まで無償で実行できます。ただし、負荷の時間によって、25×実行時間でユーザー数を消費します。ちなみにこのパターンでは250ユーザーを消費します。
  • warmup duration:負荷をかけるまでの待機秒数です
  • Browser Mix:ChromeとIEのアクセス比率を指定します。
  • Load location:どのデータセンターから負荷をかけるかという指定です。東京と大阪も指定できます。

f:id:kkamegawa:20161216202638p:plain

負荷をかけるとこのような結果が表示されます。chartをクリックすると、グラフで表示されます。

f:id:kkamegawa:20161216202639p:plain

性能、スループット、エラー数が表示されます。

f:id:kkamegawa:20161216202640p:plain

Diagnosticsでは発生した例外、情報が表示されます。これはAzure App ServiceのBasic B1で動いているので、CPUが1つです。Basic B2の2CPUに変更して同じ負荷をかけてみます。

f:id:kkamegawa:20161216202641p:plain

f:id:kkamegawa:20161216202642p:plain

数値とグラフも変わっています。

f:id:kkamegawa:20161216221257p:plain

しかし、このような数値だけではわかりづらいですね。そういうときのために設定前後の実行結果を選択して、"Compare two runs"をクリックすると、チューニング前後で比較できます。

f:id:kkamegawa:20161216202643p:plain

baseline(最初に取得したデータ)と現在のデータで比較して、どのくらい負荷が減ったか一目でわかります。

…減ったと言いたいところですが、App Serviceのスケールを変えた後の再起動後の初回起動で性能が悪化してますね(^^;。負荷テストのときはこういうことがあるので、気を付けてください。

ブラウザのリクエストをそのまま使用する

har(HTTP archive)を取得する

負荷テストのリクエストの作成はいつも結構苦労します。fidderでキャプチャして、リクエストを見ながらということが多いのではないでしょうか。

VSTSの負荷テストではブラウザが発行したリクエストを保存して転用する機能があります。

f:id:kkamegawa:20161216202635p:plain

Chromeのf12ツールのネットワークタブでリクエストを右クリックして、「生を付けて保存」すると、該当リクエストをharファイルとして保存できます。

f:id:kkamegawa:20161216202644p:plain

Edgeでも同様にf12開発者ツールで保存できます。

HTTP Archive based testを作成

f:id:kkamegawa:20161216202645p:plain

Newから"HTTP Arvhice based test"をクリックします。 f:id:kkamegawa:20161216202647p:plain

ダイアログが表示されるので、保存したharファイルを指定します。 f:id:kkamegawa:20161216202649p:plain

リクエストが追加されます。追加されるリクエストは外部のCDNなども入っているので、不要なリクエストは消してください。

f:id:kkamegawa:20161216202648p:plain

こんな風に同じリクエストが作れました。http headerとかQueryStringも入るので、便利です。ただし、リクエストごとに保存して追加という手順を踏まないといけないんですかね?この辺は拡張機能か何かあってもよさそうに思いますが…。

自動的にリダイレクトするようなサイトだと難しいかもしれませんが、自分でヘッダやQueryString設定しなくてもいいのは便利だと思いますので、使ってみてください。