パフォーマンステスト時のTIPS
まず、パフォーマンステストの目的は、通常の予定同時接続数においてユーザが満足するパフォーマンスが出るかどうか確認します。その結果を基づいてチューニングを支援するためです。
Webアプリケーションのパフォーマンステストを行う際、テスト結果の信頼性を向上させるためには、様々な観点が存在します。この記事では特にテスト環境の構築において不足しがちな要素に焦点を当て、信頼性向上のために考慮すべき4つのポイントをご紹介いたします。
ポイント1:連続リクエスト送信間隔
サーバーのレスポンスパフォーマンスを計測するテストでは、例えば100件のリクエスト送信をシミュレーションしたい場合に、一括に送信するとサーバー側に負荷を与えてしまう可能性があります。逆にリクエスト1件ずつを長い間隔で送信するとあまり意味がないと考えています。
では、連続リクエスト送信の間隔はどれくらい設定すれば効果的なのでしょうか。基本的には前リクエストの処理が終わる前に次のリクエストを送信するという原則を守ることが重要です。
連続リクエスト送信の間隔を計算する方法をご紹介します。
まず、1つのリクエストの平均レスポンス時間を先に計算しましょう。それから各リクエスト送信の間隔は1つのリクエストの平均レスポンス時間と近く小さい時間を設定します。
例として、
・1つのリクエストの平均レスポンス時間:1ms
・連続リクエスト送信の間隔:0.8ms
というような感じで良いかなと思います。
Jmeterを使う場合、Ramp-Up期間
という概念がありましてRamp-Up期間
とは、すべてのスレッド(リクエストという理解でもOK)が起動するまでの時間です。 この時間内で、等間隔にスレッドが起動します。
上記の「連続リクエスト送信間隔」と関連する例を記載します。
事前計測
1つのスレッドの平均レスポンス時間 | 1ms |
→連続スレッド送信の間隔
は0.8ms
で想定する。
Ramp-Up期間設定
スレッド数 | 100 |
Ramp-Up期間 | 80ms (=100 * 0.8ms) |
→ここでスレッド数100を実行したい場合は、Ramp-Up期間に80msを設定していれば良いと思います。
ポイント2:複数端末での実施
パフォーマンステストを実行する際、テストを実行する端末(PC)が大量のリソースを消費する場合や、シミュレーションのユーザー数が多すぎると、一台のPCでの実行ではPCがフリーズしてしまい、正確な結果が得られない可能性があります。そのため、テストの実行には必ず2台以上のPCを使用してください。
これにより、リソースの適切な分散とテストの安定性が確保され、信頼性の高い結果が得られるでしょう。
ポイント3:異なるネットワークでの実施
パフォーマンステストを一つのネットワークから実施する際、そのネットワークレベルでのキャッシュ機能が影響を及ぼし、計測結果が実際の状況とずれてしまう可能性があります。そのため、より正確な結果を得るためには複数の異なるネットワークでテストを行う設計が望ましいです。
これにより、ネットワークの特定の影響を排除し、テストの信頼性が向上します。
ポイント4:十分なTCP/IPポート数
Windows OSの場合、デフォルトのTCP/IPポート数は5,000です。
[netstat – a] コマンドを実行してポートの利用状況を確認できます。
表示される値が5,000を超えていればポート数を増やす必要があります。
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/ParametersでMaxUserPort
という名前の新しい dWord
を作成し、その値を 65,000 等に設定すればOKです(設定後にコンピューターを再起動する必要があります)。