性能とは
今回は「性能テスト」について紹介していきますが,その前に「性能とは何なのか」ということを考えてみたいと思います。性能とは何なのか?一言で言うと「システムが処理結果を返す力」です。
たとえば,インターネット上のショッピングサイトで商品を買ったことがある方は多いと思いますが,その時のことを思い浮かべてください。あなたは,とあるショッピングサイトにアクセスし,気に入った商品を選んでカートに追加し,商品購入の画面へ進み,商品を送ってもらう住所や決済のためのクレジット番号を打ち込み,やっとの思いで「商品購入」のボタンを押しました。しかし,なぜか何分たっても結果が返ってきません。不安になったあなたは一度ブラウザを閉じ,再度購入をしてみようとしたところで,やっと結果が返ってきました。それまでの時間,約3分。このような場合,あなたならどう感じますか? もちろんイライラしますよね? そう,この「システムが処理結果を返す力」こそが「性能」なのです。
この例では,「システムが処理結果を返す力」がユーザの要望に応えられていないため,「性能問題」が発生してしまっています。この「性能問題」を引き起こさないよう,システムの性能をあらかじめ把握しておくために実施するのが「性能テスト」なのです。
性能を把握するための要素
さて,それでは性能テストで性能を把握するためには,具体的には何を把握すればよいのでしょうか。結論から言うと,「スループット」「レスポンスタイム」「リソース使用量」の3つの指標を把握する必要があります。
それでは先ほどの例で見ていきましょう。このショッピングサイトでは,普段は3秒以内に商品購入の処理結果を返していました。ところが,あなたがアクセスした時は,運悪くも特売セールの日であったらしく,普段の10倍ものユーザが商品を購入するためにアクセスしていたようです。つまり,大量のアクセスが発生したため,あなたへ結果を返す時間が遅くなってしまったようです。
ここで注目してほしいのは,「性能」には「量を返す力」と「早く返す力」の2つの要素があることです。この2つの要素に分けて考えると,今回の例では,システムの「量を返す力」がアクセス数に追いつかなくなり,結果,「早く返す力」が損なわれた,と考えることができます。
では,なぜ「量を返す力」がアクセス数に追いつかなくなってしまったのでしょうか。それを知るためには,システムの「力の源」がどれくらい使用されているかを調べればわかるはずです。システムの「力の源」とは何か? それは「リソース」です。「リソース」とはCPUやメモリ,ディスク,ネットワークなどの,システムが処理を行うために必要な資源のことを指します。
それでは,今回の例で挙げているシステムのリソースの使用量を見てみましょう。どうやらサーバのCPU使用率が常に100%にまで達しているようです。さて,今回の現象をまとめると,普段の10倍ものユーザがシステムにアクセスしてきたため,サーバのCPU使用率が100%に達してしまい,結果,あなたへ結果画面を返す時間が3分もかかってしまったようです。
ここまで見てきてわかった通り,システムの性能を把握するには「量を返す力」「早く返す力」「リソース使用量」の3つの要素を把握することが必要になります。そして,一般的に「量を返す力」のことを「スループット」,「早く返す力」のことを「レスポンスタイム」という指標で表します。
スループットは,単位時間あたりに処理結果を返した件数です。たとえば,システムが1秒間に50件の処理結果を返していれば,スループットは「50件/秒」と表すことができます。一般的にはtps(※1)やPV/s(※2)などの単位で表すことが多いです。レスポンスタイムは,クライアントから処理要求を出してから,クライアントへ処理結果が返ってくるまでの時間です。複数の処理に対するレスポンスタイムを表すため,平均や90%ile(※3)などの値で表すことが多いです。
- ※1)
- Transaction per Secondの略。秒間のトランザクション数を表す。トランザクションが何を示すかは,使う場面や人によって変わるので注意が必要。
- ※2)
- Page View per Secondの略。秒間の画面表示数を表す。HTMLを要求するHTTPリクエストだけではなく,画面に含まれる画像やスタイルシートのHTTPリクエストも含まれる。
- ※3)
- 90 Percentileの略。レスポンスタイムを大きい値から順番に並べて,90%番目の値で表す。例えば,100個のレスポンスタイムがある場合,それらを大きなものから順に並べて,90番目の値で表す。
このように,性能は「スループット」「レスポンスタイム」「リソース使用量」の3つの要素で評価されます。ここまでの話をまとめると図1のようになります。

