アプリケーションのギアを上げよう
― Visual Studio 2010でアプリケーションのパフォーマンス・チューニング ―

第5回 Webサービスのパフォーマンス・チューニング

亀川 和史
2011/12/09
Page1 Page2

 それでは、Visual Studioの負荷テスト(=ロード・テスト)を実行して、性能を確認する。

 メニューバーの[テスト]メニューから[新しいテスト]を選択し、そこで表示される[新しいテストの追加]ダイアログで、「ロード テスト」テンプレートを選択して[OK]ボタンをクリックする。すると、[新しいロード テスト ウィザード]が表示されるので、以下の画面の手順を実行する。

[次へ]ボタンを押す
負荷テストのシナリオの名前(この例では「シナリオ1」)を設定する。分かりやすい名前を付ける。[待ち時間のプロファイル]欄はユーザー操作の間をシミュレートするためのものだ。ここでは何も変更せずに[次へ]ボタンを押す
ここでは[接続ロード]ラジオボタンの[ユーザー カウント]欄に「40」を指定しているが、今どきのマシンであれば40ユーザー程度のWebサービスは十分にさばいてしまうので、「200」に変更して、[次へ]ボタンを押す。なお、[ステップ ロード]ラジオボタンは、最初は少ないユーザー数で始めて、徐々に負荷が増えていくという、より業務システムに近い負荷テスト形式になっている。
複数のテスト・メソッドで負荷をかける場合、どのモデルに従うかを選択するが、今回は1つのテスト・メソッドしかないので、どれを選んでもよい。[次へ]ボタンを押す
[追加]ボタンを押して既存のテストを追加する。各テストを何%の割合で実行するかという配分比率を個別に設定できるが、今回は1つのテストしかないので、1つのテスト・シナリオで「100」%を設定する。[次へ]ボタンを押す
Visual Studioの負荷テストはネットワークの帯域をシミュレートする。LANやモデムを使うユーザーが、それぞれどのくらいいるのかを設定することにより、実環境に近い形でテストすることができる。ここでは「LAN」を「100」%に設定して[次へ]ボタンを押す
テスト処理中に監視するコンピュータを設定する。Load Test AgentをインストールしたPCが別にある場合は、ここで[コンピューターの追加]ボタンを押して追加する。[次へ]ボタンを押す
負荷テストの継続時間を設定する。今回は長時間実行しても異常がでないケースだったが、プログラムによっては長い間(数時間)負荷をかけ続けると発生するバグもある。そのような場合は実行時間を長めに取る必要がある。最後に[完了]ボタンを押せば、負荷テストが作成される
[新しいロード テスト ウィザード]

 [新しいロード テスト ウィザード]を実行して負荷テストが作成完了すると、以下のように「.loadtest」という拡張子のファイルが追加され、Visual Studio内で以下の左側のように、負荷テストの内容が可視化される。

Visual Studio内で負荷テストの内容が可視化されたところ

 WCF Load Testでの負荷テストを行う場合の注意点として、上の画面の左側のツリーにある[実行設定]配下の実行設定項目(この例では「実行設定1 [Active]」)を選択した状態で、[プロパティ]ウィンドウの[アプリケーション ドメインで単体テストを実行する]プロパティが「True」になっていることを確認してほしい。テスト・メソッドから呼び出されるWCFサービスの初期化処理がstatic(=静的メソッド)になっているため、この設定をTrueにしておかないと、結果が保証されない。

 [新しいロード テスト ウィザード]の設定で最大ユーザー数を「200」に設定したままの状態で、IIS側の設定をいくつか変更して(詳細後述)、先ほど作成したロードテストを実行して負荷結果を取得してみた(ここでは、先ほど作成したWCFサービスをIIS上で実行しているものとする)。最初に負荷が高まって、ある程度のところで収束する結果となった。これはテストとしてはほぼ必ず2秒で終わるという、意外性のないものなので、時間の経過とともにGC(=ガベージ・コレクション)が発生して、性能が低下するといった現象も起きない。

 設定が異なる4つのテスト実行ごとに処理に要した時間が異なった結果が得られた。この結果は[テスト結果]ウィンドウからExcelへレポートを出力、見やすい形式でレポートを作成してくれるので、とても便利だ。それぞれの平均応答時間のグラフを以下に掲載する。

Excelアイコンをクリックすると、Excelが起動され、ロード・テスト・レポートの生成ウィザードが起動される。ここでは平均応答時間(Avg. Response Time)のテストごとの比較結果を紹介する。比較する要素はウィザードで選択できるので、平均応答時間のほかにもいろいろな結果を比較することができる
平均応答時間のグラフ
グラフの横軸が「テスト実行ごとにVisual Studioが設定するID」、縦軸が「平均応答時間」である。

 変更した設定内容は以下の表のとおりだ。

ID 設定
7
初期状態のまま
8
Web.configファイルの<serviceThrottling>タグの maxConcurrentCalls属性の値を「100」に変更
9
Web.configファイルの<serviceThrottling>タグの maxConcurrentCalls属性の値を「100」に変更。
IISの設定で[ワーカー プロセス数の最大数]プロパティを「3」に変更
10
IISの設定で[ワーカー プロセス数の最大数]プロパティを「3」に変更
4つのテスト実行における設定内容

 [ワーカー プロセス数の最大数]プロパティは、([ファイル名を指定して実行]ダイアログで「inetmgr」を実行するなどして)「インターネット インフォメーション サービス (IIS) マネージャー」を起動し、左側のツリーで[アプリケーション プール]を選択した状態で、適切なアプリケーション・プールの[詳細設定]を押すと表示されるダイアログ(次の画面を参照)で設定できる。

[ワーカー プロセス数の最大数]プロパティの設定

 テスト9と10ではほとんど差がない。7と8の差はかなりあるが、7と9、10では40%近く平均応答速度が短くなっている。よって、この場合はワーカ・プロセス数を多くする、もしくはIISの負荷分散を図ると良い結果が出るのではないかと考えられる。

 いかがだっただろうか? 5回にわたってVisual StudioおよびWindowsの機能による性能分析機能の解説を行ったが、ツールが結果を出してくれても、結果を見てどこが悪くて、どんな処置を行わなければならないかを判断するのは開発者だ。やみくもにいろんなところに手を出さず、仮説を立て、検証して、適用するという反復作業を怠らないでほしい。end of article

 

 INDEX
  アプリケーションのギアを上げよう ― Visual Studio 2010でアプリケーションのパフォーマンス・チューニング
  第5回 Webサービスのパフォーマンス・チューニング
    1.Webサービスのテスト・シナリオの手助けになるWCF Load Test:準備
  2.Webサービスのテスト・シナリオの手助けになるWCF Load Test:実践

インデックス・ページヘ 「アプリケーションのギアを上げよう」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH