Webサイトに負荷をかけ,ボトルネックを調べるツールが出揃ってきた。アクセス増などによってWebの応答速度が落ちたり,システムがダウンしてしまうことを避けるために使う。負荷テスト・ツールは,ユーザーがWebアプリケーションを利用する一連の操作をテスト・シナリオとして抽出し,多数のユーザーによるアクセスを疑似的に発生させることができる。その結果,システムのどこがボトルネックになっているのか,どれ位のアクセスまで耐えられるかを事前に把握することが可能になる。(福田 崇男=tafukuda@nikkeibp.co.jp)

表1 Webアプリケーションに対応した主な負荷テスト・ツール
 Webサイトの応答速度を上げるために使う負荷テスト・ツールが出揃ってきた。Webに対し,多数のユーザーを想定したアクセスを疑似的に発生させボトルネックを洗い出し,システムを最適化するためのツールである。

 2000年5月頃から,テラダインの「e-TEST suite」,日本ラショナルソフトウェアの「Rational Suite PerformanceStudio」,マーキュリー・インタラクティブ・ジャパンの「LoadRunner」といったツールの日本語版,最新版が相次ぎ登場した(表1[拡大表示])。テラダインの「e-TEST suite」は楽天が採用を決定し,マーキュリーの「LoadRunner」(写真1[拡大表示])は英語版がAmazon. comやAmerica Onlineといった米国サイトですでに利用されている。

写真1 マーキュリー「LoadRunner」のスクリプト生成画面
録音ボタンを押して,実際のユーザー同様にWebアプリケーションにアクセスすると,そのオペレーションを自動的にスクリプト化する。
 Webサイトでは,実際にサービスを開始してみると,アクセス数の増加に耐え切れずシステムが停止したり,レスポンスが悪化してしまうことがよくある。インターネット上のWebサイトでは,どのくらいのユーザーがアクセスしてくるかを事前に予測することが難しい(図1[拡大表示])。運用開始前に負荷テストを実施しておけば,どれくらいのアクセスまでは問題なくさばくことができるかを把握することができる。

仮想的に大量アクセスを発生

 負荷テスト・ツールは,ターゲットのWebサイトに対して実際の運用を想定して多数のアクセスを行う。そのときのシステムの状態をモニターしてボトルネックを見つけ出す。

 機能としては大きく3つある。ユーザーの操作をスクリプト化する機能,大量のユーザー・アクセスを疑似的に発生させてシステムに負荷をかける機能,テスト時のサーバーの状態をモニターしたりレポートにする機能である。表1に挙げたツールはどれもこれらの機能を備えている。

 負荷テストを実施するには,まずテストの手順であるシナリオを作る必要がある。そのために,ユーザーがWebアプリケーションにログインして,それを使う流れをツールを使って抽出し,スクリプトとしてはき出す。例えば,マーキュリーの「LoadRunner」では,「録音」ボタンを押してからブラウザでWebアプリケーションを使用し,「停止」を押すと自動的にその間の操作をスクリプト化してくれる。

図1 Webアプリケーションのアクセス数予測は困難
アクセス数やサーバーへの負荷は,不特定多数へのサービスをするWebアプリケーションのシステムでは予測ができない。
 アクセスするたびにユーザーIDを変えたい,同じ操作を100回繰り返したいといった場合はスクリプトを編集する必要があるが,その場合はツールの画面でパラメータを指定すればよい。テキスト・ファイルからユーザーIDなどの値をテスト・シナリオに取り込むこともできる。そのほか,Webサーバーから返ってくるHTMLが期待していたページであるかどうかといったチェックや,システムのレスポンス・タイムのチェックをスクリプトの中に埋め込むこともできる。

 大量のアクセスを発生させる場合,実際に多数のクライアント・マシンを使うのではなく,1台あるいは数台のクライアント・マシンを用意すればよい(図2[拡大表示])。ツールを使うことで,万単位のアクセスを疑似的に発生させることができる。1つのマスター・マシンでスクリプトを作り,それを編集したあとで複数のクライアントにそれを送り,実行させる。発生させられるアクセス数は,テストに使うマシンのCPUやメモリー容量などに依存するが,例えば,テラダインの「e-TEST suite」(写真2[拡大表示])は1台のマシンで約500ユーザーのアクセスを発生させることができるという。

 Webアプリケーションでは,セッション管理をするのにクッキーを使ったり,URLにセッションIDを埋め込んだりすることが多いが,負荷テスト・ツールはこれらにも対応し,自動的に処理してくれる。

テスト結果は単なる数値

図2 バーチャル・ユーザーの実現
大規模アクセスを想定した負荷テストに必要なバーチャル・ユーザーは,1ユーザーを少ないメモリーでエミュレートすることで,初めて実現可能になる。
 負荷テストの結果から分かるのは,サーバーのレスポンス・タイムや,CPUの稼働率である。テスト・ツールはそうした結果をレポートやグラフとして表示してくれる。データを取得するには,テスト対象であるシステムのサーバー・マシン内に専用のエージェント・プログラムをインストールしておくか,SNMP(シンプル・ネットワーク管理プロトコル)を使って,サーバーの状態などを取り出す。

 テスト結果を元に,どの処理に時間がかかっているか,どのマシンがボトルネックになっているかを分析し,チューニングする。テスト・シナリオを変えてユーザー数を増やしたり,トランザクション処理を多く発生させたりすることで,ボトルネックを特定するための情報が得られる。

 ただし,ツールが教えてくれるのは,負荷テスト時のサーバーの状態を記録した数値である。システムのどこにボトルネックがあるかを明示してくれるわけではない。テスト結果を分析し,どの部分をチューニングするかはユーザーが決めなくてはならない。

写真2 テラダインの「e-TEST suite」での負荷テスト
(a)「e-TESTER」のスクリプト生成画面。ウインドウ内のブラウザ画面を操作すると,そのオペレーションを自動的にスクリプト化する。(b)「e-LOAD」の負荷テスト実行画面。「e-TESTER」で作成したスクリプトを負荷テストのシナリオとして実行する。画面下部にバーチャル・ユーザーの負荷テスト実行状況が表示される。
 なお,ラショナルの「Performance Studio」はHTTPだけでなく,TCP/IPベースであればどんな通信でもテストすることができる。ブラウザからJavaを使ってアクセスする場合や,サーバー-サーバー間の通信も,その通信をキャプチャし,仮想的にアクセスを発生させることができる(図3[拡大表示])。例えば,Webサーバーとアプリケーション・サーバー間に限定して負荷テストを実施することも可能である。

Webのレスポンス・タイムを監視

 負荷テストのために作成したテスト・ケースは,日々の品質管理にも利用できる。あるテスト・シナリオを使ったテストを定期的に行う設定をしておき,例えば,なかなかページが表示されないような場合はEメールやポケベルにアラームを出すことも可能だ。

 データベース・サーバーのCPUやハード・ディスクの負荷がそれほど問題にならない場合でも,実際にユーザーがアクセスしてみるとWebの応答が遅いことがある。システムの各部が正常に動いているかどうかと,ユーザーが快適にWebを利用できているかは必ずしも直結しない。そこで,実際のユーザーと同じようにWebをアクセスしてみて,快適に使えているかどうかを監視することが重要になる。

結果的にはコスト・ダウンに

図3 ラショナルのPerformanceStudio
負荷テストの対象を変えることでボトルネックを見つけることができる。
 「多くのWebアプリケーションは,構築担当者が期待したようなアクセス数をさばききることができていない」(マーキュリー セールス・ディレクター岡崎俊二氏)というように,Webアプリケーションがどこまでのパフォーマンスを発揮できるかは,システム構築の担当者でも確実には分からない。また,システムの高負荷時のパフォーマンス確保といった問題にあまり時間を取られたくないと考えるシステム・インテグレータもいる。来るかどうかわからない大量アクセスを想定して負荷分散装置やミラー・サーバーを購入するのも,無駄な支出になりかねない。

 負荷テスト・ツールは後述するように安いものではないが,サーバーやシステムがダウンしてしまったときの損害や,復旧のための作業費,社会的信用の低下を考慮すれば利用する価値はある。大規模なWebサイトになればなるほどサイトがダウンした時の影響は大きいからである。「以前は100から500のバーチャル・ユーザーのライセンスを利用するユーザーがほとんどだったが,99年後半からは1000ユーザーあるいは1万ユーザーといったケースが増えている」(マーキュリー 岡崎氏)というように,大規模なWebサイトが負荷テスト・ツールを利用する事例が増えてきているようだ。

インターネット上から負荷テスト

 システム・ダウン時のことを考れば高くはないとはいっても,ここで取り上げたツールは,発生させさらるユーザー数が100,プロトコルはHTTPだけといった基本構成でも200万円程度はする。ユーザー数を増やしたり,オプションを加えるとサーバーが数台買える値段となる。また,ツールは導入したからといって,すぐに使いこなせるものではない。負荷テストのシナリオはハードウエア構成や,サーバーの設定,アプリケーションの内容を十分考慮したものでないと意味のないものになってしまう可能性があるからだ。負荷テストの中でCのプログラムをコールするといった複雑な処理をする場合などでは,若干のコーディングが必要になることもある。

 ラショナルは「試験ツールを導入する際の教育やコンサルテーションは必須」とし,ツール購入時に2日間の現地コンサルティングを行う(費用別途)。テラダインは,テスト・ラボの設置や負荷テスト・ツールのレンタル・サービスを予定している。マーキュリーはロンドンやサンノゼなど数カ所に置いたセンター「Load Farm」から,インターネット上のサーバーに負荷テストを実施するサービス「Active Test」を7月から開始している。負荷テストの具体的な内容検討やテスト結果の分析まで行ってくれる。今後は東京にも「Load Farm」を設置する予定である。