クライアントがエフェメラルポートを使い果たしたか、クライアント環境に問題があるようです。
Windowsを使用していますか?
少なくとも次のことができる可能性があります。
- Windows:jmeterのホストとしてのWindowsシステムのソリューションについては、この記事を参照してください。
- 代わりにLinuxシステムをホストとして使用して、Jmeterの負荷シナリオを実行します。
同様に、この記事がテスト活動に役立つこともあるでしょう(私はタグでJbossを見ました)。
アップデート:
上記のリンクされた記事からもう一度:
HTTPリクエストが行われると、TCP/IP接続にエフェメラルポートが割り当てられます。エフェメラルポートの範囲は32678〜61000です。クライアントが接続を閉じた後、接続は60秒間TIME-WAIT状態になります。
JMeter(HttpClient)が1秒あたり数千のHTTP要求を送信し、新しいTCP / IP接続を作成している場合、システムは割り当てに使用できるエフェメラルポートを使い果たします。
。。。
そうしないと、JMeterJTLファイルに次のメッセージが表示される場合があります。
非HTTP応答コード:java.net.BindException
非HTTP応答メッセージ:アドレスはすでに使用されています
解決策は、TIME_WAITソケットの高速リサイクルを有効にすることです。
エコー1>/proc / sys / net / ipv4 / tcp_tw_recycle
他のオプションには、接続がTIME_WAIT状態に置かれる時間を短縮するTCP_FIN_TIMEOUTと、システムがTIME_WAIT状態に置かれた接続を再利用できるようにするTCP_TW_REUSEが含まれます。
サーバー側:
これにより、TIME_WAITソケットの迅速なリサイクルが可能になります
/sbin/sysctl -w net.ipv4.tcp_tw_recycle=1
これにより、新しい接続にTIME_WAIT状態のソケットを再利用できます。これはtcp_tw_recycleのより安全な代替手段です。
/sbin/sysctl -w net.ipv4.tcp_tw_reuse=1
tcp_tw_reuse設定は、Webサーバーなど、多数の短い接続が開いてTIME_WAIT状態のままになっている環境で特に役立ちます。ソケットを再利用すると、サーバーの負荷を減らすのに非常に効果的です。
システムが同時に保持するタイムウェイトソケットの最大数
/sbin/sysctl -w net.ipv4.tcp_max_tw_buckets=30000
/etc/sysctl.conf
または同じですが、別の方法で-変更が再起動後も存続するように、ファイルに以下の行を追加します。
net.ipv4.tcp_max_tw_buckets = 30000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
同様に、サーバー側での結果を調べますulimit -n
。
最大オープンファイルの制限のデフォルト値は1024です。これは、1000接続でのBindExceptionsの出現を説明できます。
同様に、たとえばを使用して、テスト実行中にサーバーとjmeter間の接続数を監視できます。
netstat -an | grep SERVER_PORT | wc -l
接続の制限を定義する-もしあれば。