パフォーマンステストに関して初心者なので、「アート・オブ・アプリケーション パフォーマンステスト (Theory in practice) | Ian Molyneaux, 田中 慎司 |本 | 通販 | Amazon」を読んでみました。パフォーマンステストってそもそも何をすると良いのか、一般的に気をつける点はどこなのかを勉強する目的で読みました。以下章立てですが、1,2,4章をしっかり、3,5章はざっくり目を通しました。(3章はプロジェクトの中でどのようなステップでパフォーマンステストをするかみたいな話で今知りたいことじゃない、5章は特定技術に対するパフォーマンステストへの影響の説明だったので一旦関係のある部分だけ読みました。)
1章 なぜパフォーマンステストをするのか?
2章 効率的なアプリケーションパフォーマンステストの基礎
3章 パフォーマンステストのプロセス
4章 結果の解釈:効果的な根本要因の分析
5章 アプリケーション技術とそのパフォーマンステストへの影響
所感
- ツールの使用方法レベルの具体的なやり方ではなく、パフォーマンステストについて概念的な部分を体系的に学べて良かった。
- いままでやってきて身につけたバラバラとした知識を体系的に整理できた気がする。
- これからパフォーマンステストをやってみようという人にはオススメ。
- パフォーマンステストの分類やどのように負荷をかける方法があるかはこういう本で最初に勉強しないとわかるわけない。
- 初心者としては、気にすべきポイントを知れた部分は大きい。
- 例えば負荷挿入サーバが過負荷になっていないか確認すること。初心者の私は負荷掛け対象のことしか気にしていなかった。
メモ
負荷挿入サーバが過負荷になっていないか確認する。
- 過負荷であるならば負荷生成サーバを増やす。
- 監視項目
- CPU使用率
- 空きメモリ量
- ディスク使用率
- ディスクアクセス情報(例えばiostat -x)
主要なパフォーマンス指標
- 可用性
- サーバが過負荷時にタイムアウトでエラーを返すかもしれない。
- 同時接続数、スケーラビリティとスループット
- 応答時間
- ネットワーク使用率
- データ量
- データスループット
- データエラー率
- サーバ使用率
- CPU使用率
- メモリ使用料
- ディスク入出力
- ディスク容量
ピーク時の利用を許容できるようにすることも考慮する。
コード変更があるとそこまでの負荷テストはほとんど無意味になる。
- テストプラン(スクリプト)が無意味になる場合がある。
テスト環境は本番環境になるべく近くする。
パフォーマンスが生きるか死ぬかは提供されたテストデータの質と量にかかっている。
- 入力データ
- 目標データ
- データベースに現実的なサイズのテストデータを入れる。
- データを書き換えるようなテストを行う場合はテストごとにロールバックを行いデータを同じ状態に戻す。
- 実行データ
- アプリケーションから返されるデータ。セッションに関する情報など。
様々な種類のパフォーマンステスト
- ベースラインテスト
- 将来のテスト実行と比較するために行う。
- 一定 の仮想ユーザや一定の時間負荷をかけ「最良の場合」を計測する。
- 負荷テスト
- 目標の値までアプリケーションに負荷をかけていく。
- 実際の利用方法に沿った値を利用。
- ストレステスト
- システムの上限を調べるテスト。
- システムに無理させてみる。
- 浸透、安定性テスト
- 長時間負荷掛けを行いメモリリークなどの問題を発見する。
負荷の掛け方
- ビックバン型
- 全仮想ユーザが同時に開始する。
- 同時にスタートすると極めて大きい負荷がかかるのでパフォーマンステストを正常に始める前にシステム障害になるかもしれないので注意する。
- 増加型
- 目標数に到達するまで負荷を一定間隔で増やしていく。
- 増加型(ステップ付き)
- 目標数に到達するまで負荷を一定間隔で増やしていく。
- 途中で負荷をしばらく一定にして定常状態を確認する。
パフォーマンステストのステップ
- テスト環境を準備する
- 負荷を挿入する環境を準備する
- 業務トランザクションを特定し、スクリプト化する
- 十分なテストデータを特定し作成する
- テスト環境を確認する
- パフォーマンステストを順次実行する
- 特定された問題に対処する
統計学入門
- パフォーマンステストにおいて理解しておくべき統計ツール
- 平均値
- 中央値
- 標準偏差
- 正規分布
- パーセンタイル値
- ヒストグラム
テスト前の準備
- 実行したテストの区別をできるようにする
- テスト結果などのファイル名などでテストを識別できるようにする。
- どのテストで何を測定したかったのかを文書化する。
テスト後のタスク
- 必要な結果が全てでているか確認する。
- テストの全ての資産(スクリプト、入力データファイル、テスト結果など)は隔離した場所でバックアップをとっておく。