web-dev-qa-db-ja.com

JMeter:Java.net.NoRouteToHostException:要求されたアドレスを割り当てることができません(アドレスは利用できません)

HelloControllerを持つ簡単なSpringブートアプリケーションを作成しました。

Get API: http://localhost:8080/hello
Response: Hello World 

これで、上記のget APIにヒットする10万人の同時ユーザーを持つJMeterスクリプトを作成しました。 JMeterスクリプトを実行すると、3万カウント後にエラーが発生し始めます。

Java.net.NoRouteToHostException: Cannot assign requested address (Address not available)

この理由は何ですか?この問題を解決するにはどうすればよいですか?

  • UBUNTU 18.04と8GB RAMを使用しています。
  • 操作の実行中は、JMeterとSTSのみが開いていました。
7
dpk

Lakshmi Narayan answer に従って、利用可能なポートを増やすことができます。

解決:

  1. 以下のコマンドを使用して、ローカルポート範囲を拡大しました。

echo 1024 65000>/proc/sys/net/ipv4/ip_local_port_range

これにより、より多くのローカルポートを使用できます。

  1. 以下のように、TIME_WAITソケットの高速リサイクルを有効にします。

$ Sudo sysctl -w net.ipv4.tcp_tw_recycle = 1

デフォルトでは、

cat/proc/sys/net/ipv4/tcp_tw_recycle

出力:0(デフォルトでは無効)

本番環境で有効にした場合は注意してください。これはJmeterの負荷テストにのみ使用される内部環境およびマシンであるため、リサイクルを有効にして問題を解決しました。

  1. 以下のようにソケットの再利用を有効にします。

$ Sudo sysctl -w net.ipv4.tcp_tw_reuse = 1

デフォルトでは、

cat/proc/sys/net/ipv4/tcp_tw_reuse

出力:0(デフォルトでは無効)

注:tcp_tw_reuse設定は、Webサーバーなど、多数の短い接続が開いていてTIME_WAIT状態のままになっている環境で特に役立ちます。ソケットの再利用は、サーバーの負荷を減らすのに非常に効果的です。

高速なリサイクルと再利用を有効にすると、サーバーは単一のUnixボックスで5Kのユーザーロードをサポートできます。

9
user7294900