特集
» 2009年01月15日 01時30分 UPDATE

Programing Bible:Webの負荷テストに使えるフリーソフトウェア (1/2)

インターネット上では、Webアプリケーションやサーバそのものが高負荷となることは可能な限り回避する必要がある。本稿では、動的Webサイトの専門家がWebの負荷テストで使えるソフトウェアを幾つか紹介していく。

[Leslie P. Polzer,ITmedia]
SourceForge.JP Magazine

 Webアプリケーションおよびサーバの高負荷時の挙動を確認する方法の1つが、疑似的に負荷をかけてテストを行うことだ。ここでは、そうしたテストを実施するフリーソフトウェアを幾つか試し、それぞれがどんなタイプのサイトに適しているかを調べた。

 負荷テスト用のツールはいろいろあるが、メンテナンスが行われていないもの、フリーでないもの、インストール手順が明確でないものを除くと、curl-loader、httperf、Siege、Tsung、Apache JMeterの5つが候補として残る。

 JMeterについては、すでにダニエル・ルービオ氏が取り上げているので、ここでは詳しく説明しない。ただし、最後のまとめでほかのツールとともに簡単に触れている。

curl-loader

 curl-loaderは、「SpirentのAvalancheやIXIAのIxLoadの代替として使える強力かつ柔軟なオープンソースのテストソリューションの提供」を目的としている。完成度と柔軟性の高いcURLライブラリを利用して、要求や認証、セッションの処理を行う。

 curl-loaderのビルド方法は単純明快で、パッケージをダウンロードし、展開して、展開先のディレクトリでコードのmakeを行うだけだ。ただ、ip_secondary.cというファイルに「#include 」という行を追加する必要があった。おそらく、最近のglibcヘッダファイルの変更が原因だろう。また、curl-loaderをコンパイルして実行するには、OpenSSLのライブラリとヘッダファイルのインストールも必要になる。

 テストを始めるには設定が必要だ。curl-loaderの設定は2カ所で行う。1つは、具体的なシナリオを決めるパラメータを記述する設定ファイルである。書式は簡単で、変数に値を代入する「VAR=VALUE」という形の式を1行ずつ並べる。非常に分かりやすいサンプルが、ソースツリーの「conf-examples」ディレクトリに幾つか用意されている。

 curl-loaderでは、複数のIPアドレスを使って、別々のクライアントから要求が来る状況を再現できる。そのため、INTERFACE、CLIENTS_NUM_MAX、NETMASK、IP_ADDR_MIN、IP_ADDR_MAXの各値を各自のネットワーク環境に合わせて調整する必要がある。同時接続可能な最大クライアント数は、指定するIPアドレスの範囲によって決まる。

 もう1つの設定の場となるのが、curl-loaderを実行するコマンドラインインタフェースだ。必須となる「-f」引数には、テストに使うシナリオファイルの場所を指定する。そのほかの引数は、実施するテストの微調整に用いる。例えば、curl-loaderのデフォルト設定では、要求の発行がシングルスレッドで行われる。システムリソースの節約とパフォーマンスの向上には悪くない設定だが、マルチコアCPUのマシンであれば「-t」オプションを使って、利用するコア数に応じてスレッドを追加するとよいだろう。

 テストの結果は、サマリ情報が画面上で定期的に更新されるほか、詳細な情報がログファイルに記録される。拡張子が「.log」のファイルには発生したエラーの情報が、「.ctx」ファイルにはクライアント別の統計情報が、「.txt」ファイルには時系列の統計情報がそれぞれ書き込まれる。

 Pythonで書かれた、curl-loaderの類似ツールとしてPylotがある。こちらはGUIを備え、設定ファイルがXML形式になる。

httperf

 httperfは、Hewlett-Packard Laboratoriesが開発した、シングルスレッドで動作するコマンドラインの負荷テストツールだ。

 httperfでは、設定のほとんどをコマンドライン引数で行う。設定ファイルは、セッションのシナリオを記述するための補助的な役割を担う。

 以下は、接続数を5,000、各接続が発行を試みる要求数を50とした場合の実行例である。


httperf --server=localhost --uri=/ --num-conns=5000 --num-calls=50

 最初の出力行には、コマンドラインで指定されずにデフォルト値が割り当てられた引数も含め、コマンドの引数群が次のような完全な形で表示される。


httperf --client=0/1 --server=localhost --port=80 --uri=/ \
  --send-buffer=4096 --recv-buffer=16384 \
  --num-conns=5000 --num-calls=50

 curl-loaderと違って、httperfは実施しているテストの経過表示の更新も、詳細なログの記録も行わない。テスト終了時に結果のサマリが表示されるだけである。デバッグ用のスイッチを使えば実行中のテストの内容を把握できるが、このスイッチを有効にするにはコンパイルをやり直す必要がある。

 httperfで個人的に気に入っているのは、すべてのパラメータをコマンドラインから指定できる点だ。負荷テストの条件をその場でいろいろと変えながら試し、条件が決まったらそのパラメータをシェルスクリプトに記述すればよい。そうすれば、さまざまなテストを逐次的に、あるいは並行して実施するのも簡単だ。

 ただし、コマンドライン引数の解釈の部分に詰めの甘さが見られる。例えば、対象URIのサーバとパスの部分を別々に指定する必要はない。また、パスの部分の指定に「--uri」というオプションを使っているが、URIにはサーバ名が含まれることもあるので、このオプション名は適切とはいえない。

 httperfと同じスタイルでもう少しシンプルなツールがよければ、http_loadを試すとよい。

プログラミングの最新動向を知りたければ「Programing Bible」にお進みください。あなたの仕事を楽にするツールを多く紹介しています。


       1|2 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

Loading

ピックアップコンテンツ

- PR -
激変する企業ITシステムに対応するための知見を集約。 ITの新しい潮流に乗り遅れないために。