パフォーマンステストのヒント
1. 現在のブロードバンドで許可される最大同時実行数を評価します。
たとえば、Web ページ リクエストの応答サイズが 120K、サーバー帯域幅が 100M の場合、約 80 の同時実行をサポートできます (計算方法は、100×1024÷8×75%÷120=80)。
8で割るのは、ブロードバンドの単位とファイルサイズの単位が異なるためです。ブロードバンドの単位はビット、ファイルの単位はバイト(1Byte=8bit)です。0.75倍する理由は、正常に動作することを保証するためです。サーバーアクセス、
一定量の帯域幅を予約する必要がありますが、最大値に従って計算することはできません。
2. 単一マシンの同時実行計算を効果的にテストします (単一マシンは最大 546/秒の同時実行をサポートするため、通常の状況では同時実行は 500 以内になるはずです)。
① 理論上、システム内のポート数は 65536 です。
② クライアントがリクエストを開始すると、システムは使用するためにアイドル ポートを割り当てます。ポートは同時に 1 つのサービスでのみ使用できます。
③ tcp プロトコルがシステムへのポートの切断を完全に解放するまでに約 2 分かかります。
上記の 3 つの項目を組み合わせると、次のように計算できます。
理論的には、単一のテスト マシンの場合、パフォーマンス テストは 1 秒あたりの最大有効同時数 546=65536/2/60 をサポートします。ただし、システム自体がインターフェイスの一部を占有するため、同時数は 500 以内に制御する必要があります。
3. パフォーマンステスト N+1 メソッド:
いわゆる N+1 方式とは、パフォーマンス テスト中に、アイドル状態のマシンをストレス テスト マシンの外部に追加して、ストレス テスト中にリクエストを手動で送信できることを意味します。ここで、N はストレス テスト マシンのリクエストです。
1 はアイドル状態のマシンによって送信されるリクエストであるため、同時実行性が高く、いくつかの問題を簡単に発見できる場合、テストはユーザー エクスペリエンスにより適したものになります。
4. 125 の原則:
つまり、クライアントがリクエストを送信してからサーバーが応答して受け入れを完了するまでの時間です。
1 秒以内に、ユーザーはシステムの応答が速く、エクスペリエンスが非常に優れていると感じるでしょう。
2S ~ 5S 以内であれば、ユーザーはシステムの応答速度は悪くないと感じるでしょう。
5S を超えると、ユーザーはシステムの応答が非常に遅く、エクスペリエンスが悪く、ページを見逃しやすいと感じます。
パフォーマンス ストレス テスト中の一般的な接続エラーの分析
1. 圧力テスト中にエラーが報告されます: 接続がタイムアウトしました (ConnectTimeout)
原因:
1) 圧力測定ツール自体の接続タイムアウト設定が原因の可能性があります
a) たとえば、Jmeter http リクエスト ページの [詳細] タブには、接続端末と応答端末の両方を 30,000 (30 秒) に設定するなど、リクエストの送信と返信のタイムアウトを設定できるタイムアウト設定があります。
b) Jmeter の jmeter.properties など: httpclient4.idletimeout = 30000 (遅延 30 秒、通常は 10 ~ 60 秒に設定)
2.サーバー側で接続タイムアウトの問題が発生している可能性があります
a)、最初に圧力テストインターフェイスのデータリンクを分析します。
b) Nginx、mq、redis、マイクロサービス、データベースなどのリンクに従って、各レイヤーの考えられる接続タイムアウトを段階的に分析します。各レイヤーには接続タイムアウトがある可能性があります。
2. ストレス テスト中にエラーが報告されます: 接続が拒否されました
1)、最初にネットワークとサーバーのステータスを確認し、物理的な接続の問題を除外します。
2) 同時実行性が高い場合、一部のインターフェイスはフロー操作を制限し、一部のリクエストは介入層 Nginx (nginx_http_limit_conn_Module) で制限される可能性があり、リクエスト接続は拒否されます。
3) Tomcat などの一部のミドルウェアには、accept-count 値などの最大待機カウント設定があります。acceptCount は受け入れられる待機の最大数です。待機キューがいっぱいになると、新しいリクエストは Tomcat によって拒否されます。
4) mysql、mongoDB などのデータベースには最大接続数があり、最大接続数を超えたリクエストも拒否されます。
3. 圧力テスト中にエラーが報告されます。接続がリセットされます (接続リセット)。
1) 実際の耐圧試験中に接続がリセットされる事態に遭遇しましたが、その後、耐圧試験用ネットワークのドメイン名に問題があることが判明しました。
2) サーバーとクライアントの接続方法が異なり、同時に長い接続や短い接続など同じ接続方法を使用する必要がある可能性があります。
3)、HTTPS プロトコル、TLS バージョンに不一致がある可能性があります。サーバーとクライアントは同じ TSL バージョンを使用します。
4. 圧力テスト中にエラーが報告されます: ソケットが閉じています
1) 理由の分析: Linux サーバーの接続数はデフォルトで 1024 ですが、これは少なすぎます。これは明らかに高い同時実行には十分ではありません。
/etc/sysctl.conf で 3 つのパラメータを変更します
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
変更された sysctl -p
5. Windows で Jmeter を使用してストレス テストを実行すると、「java.net.BindException: アドレスはすでに使用されています: 接続」というエラーが報告されます。
理由: TCP/IP 接続用に Windows によって提供されるポートは 1024 ~ 5000 で、それらをリサイクルするには 3 ~ 5 分かかります。そのため、短期間に大量のリクエストを実行するとポートがいっぱいになってしまいます。時間がかかるため、上記のエラーが発生します。
解決策 (jmeter が配置されているサーバー上で操作します):
1) cmd で regedit コマンドを入力してレジストリを開きます。
2) HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters のパラメータを右クリックします。
3)、MaxUserPort という名前の新しい DWORD を追加します。
4) 次に、MaxUserPort をダブルクリックし、値のデータを 65534 として入力し、基数として 10 進数を選択します (ポート番号をさらに増やします)。
5) 上記の操作が完了したら、構成を有効にするために必ずマシンを再起動してください。