ダミーの RESTful サービスのパフォーマンス テストを行っているときに、こちらまたはこちらConnectException: Cannot assign requested address
で説明されている問題に遭遇し、チューニングの推奨事項を適用しました- エフェメラル ポートの範囲を 10000 ~ 65000 に増やしました。この優れたブログ投稿で、ビジー状態の Linux サーバーでの TCP TIME-WAIT 状態への対処。ulimit -n
net.ipv4.tcp_tw_reuse
net.ipv4.tcp_tw_recycle
これはまだ役に立ちませんでした。1 秒あたり最大 10,000 のリクエストをシミュレートできたので (私のテストでは各ユーザーが 1 つのリクエストしか実行しないため)、4 台以降の 8 台のクライアント マシンにスケールアウトしました。4 台のマシンでは、マシンごとに 5,000 のリクエスト/秒 (合計 20,000) を実行できましたが、8 台のマシンではそれらの 5k でさえ実行できないため、問題は別の場所にある可能性があります。
SocketOptions
それにもかかわらず、シミュレーションまたは gatling.conf を介してガトリング接続に設定するオプションがあるかどうかを尋ねたいと思います- そこでSO_REUSEADDRを使用したいと思います。一部のオプション (接続タイムアウト) は gatling.conf で設定できますが、これは見つかりませんでした。
また、Gatling が接続を共有する方法を説明するドキュメントはありますか? 「ユーザー」が接続インスタンスを取得する大きな接続プールか、各ユーザーが自分の接続を開くダミーのいずれかを期待しますが、どこかで、ユーザーごとに接続プールがあることを読んだことがあります(接続を共有しているのは誰ですか、それとも、これらは彼の以前のリクエストで使用されたキャッシュされた接続ですか?)。
編集:したがって、解決策は最終的に簡単でした:.shareConnections
設定時に使用しますScenarioBuilder.protocols(...)
。コマンドライン引数として使用しようとしましたが-Dgatling.core.http.shareConnections
(maven プラグインからテストを実行しています)、うまくいきませんでした。プログラマティックなアプローチでした。