性能試験について(試験実施編)

今回は以前の「性能試験について(性能試験とは編)」の続きで、性能試験の準備や実施方法、試験実施時の注意点などを紹介したいと思います。 gsol.hatenablog.com

事前準備

データの作成について

性能試験を実施するには、試験で使用するデータを作成する必要があります。データは以下のようなツールを使用して作成します。

業務データについてはアプリ担当者と相談して準備します。準備するデータは大きく2つの種類に分けられます。

  1. 実際の処理で使用されるデータ
    • 準備方法:負荷試験ツールを用いて実際の処理を重ねてデータを増やしていく。
  2. 負荷のために単純にデータの母数を増やしたいためのダミーデータ
    • 準備方法:プロシージャを登録して、元データをselect insertして増やしていく。

シナリオの選定について

シナリオの選定は以下のような基準で選定します。

  • 利用率の高かったり、お客様から要望のあった業務フロー
  • アクセスログ等から解析して利用率上位
  • 新機能を対象とする

AWS環境を利用する際に必要な申請

AWS環境で負荷試験をする場合は事前に申請しておく必要があります。申請は2つあります。

  1. 負荷試験を行う旨と試験の内容(予測されるピーク時のリクエスト数や利用するAZの情報、トラフィックの傾向とともに予想される最大・最少アクセスの時間等)についての申請

    • 事前申請が必要とされる負荷試験は、EC2に対して1 分を越えて継続する、1 Gbps (10 億ビット/秒) または 1 Gpps (10 億パケット/秒) を超える負荷を実施する場合で、外部からの攻撃ではなく性能試験を実施することを報告する必要があります。
    • ただし、提示されている負荷条件に達している場合に申請するものであるため、条件を満たさない場合には事前申請は不要です。
  2. ロードバランサーの暖気申請

    • 急激なトラフィック増が見込まれるため、事前にロードバランサ―を暖気(スケールアウト)させておく必要があります。
    • 負荷試験以外でもサービスイン初日であった場合にも申請されるケースがあります。
    • 代替手段としては、事前に負荷試験ツール等を使用してロードバランサ―に負荷をかけて暖気(スケールアウト)させておくという事も可能です。

試験実施

負荷試験ツール

負荷試験で使用するツールは、基本はフリーで事例が多いJmeterを使用します。Jmeterプラグインが充実しているので便利です。

Jmeter以外にも様々な製品はありますが、有償でライセンスが必要であったり使い勝手が難しいものあったりするため、比較的使いやすいJmeterを使用する事が多いです。

負荷をかける時間

負荷をかける時間は、特に決まっているわけではないのでお客様と相談の上で決めます(大体はこちらで提案します)。

数時間負荷をかけ続ける場合もあれば、20~30分間で行う場合もあります。

試験の実施時間帯

ケースバイケースでお客様や環境によって、業務終了後/夜間/休日/平日の日中の時間帯で実施したりします。

試験実施時の注意事項

  • 連携先のシステムや外部Webサービスの制限事項にも注意

    • 連携先のシステムが短時間での高負荷を禁止しており、試験が実施できないという場合もあります。
  • Jmeterで負荷をかける時の注意事項

    • Jmeterなどのシナリオは思考時間を考慮しましょう。

      • 本来ありえない負荷がかかってサーバー側がハングしてしまったりするので、思考時間を設定してリクエストによる負荷にバラつきを持たせる必要があります。
    • 負荷をかける際は徐々に負荷をかけていく時間、ピーク時間を分けましょう。

      • 急激に負荷をかけると、負荷試験ツール側/サーバー側の両方でハングしてしまって試験になりません。

        例)100ユーザで20分間の負荷試験を実施する場合

        ⇒ ①負荷をかけていく時間[5分] + ②負荷のピーク時間[15分]

           ①最初の5分間の間に実行スレッド数を増やしていく。

           ②5分間かけて100ユーザ分の負荷がかかる状態になったら、残りの15分間をピーク時間帯として計測していく。

チューニング(アプリケーション以外)

アプリケーション以外でのチューニングとしては、主に以下のような対応があります。

  • WEBサーバ
    • 帯域制限がある場合は、WEBサーバでコンテンツ圧縮対応を実施する。
  • DBサーバ
    • OracleDB内のバッファキャッシュのメモリサイズが不足して物理読み込みが多いため、メモリ割り当てサイズを上げる。
  • クラウド環境
    • 対象インスタンスでのネットワークの帯域制限に達してしまい処理遅延が発生したため、インスタンスのスケールアップを実施する(インスタンスをスケールアップする事で帯域制限の上限を上げる)。

おわりに

性能試験はチューニング及び再試験の対応を想定して、余裕を持ってスケジュールを組みましょう!

性能問題が発生した際は、チューニングや再試験が必要になります。 問題が発生する前提で、余裕を持ったスケジュールを立てて性能試験に臨みましょう。性能試験のスケジュールが遅れた場合、その遅れがプロジェクト全体の遅れにつながってしまいます。

性能試験は必ず実施しましょう!

性能試験は試験の計画に含め、必ず実施しましょう。 もし試験を実施せずに本番システム稼働を迎え、稼働後に性能問題が発覚した場合、業務に多大な影響を与えてしまうことになります。