10

Jmeterを使用して、Webアプリケーションへの複数のリクエストをテストしています。
NumberOfThreadはJmeterで50として使用しました。

私のプロセスは次のとおりです。

  1. ログインページ。
  2. userIDとパスワードでログインします。
  3. メニューページを表示します。
  4. 検索ページをクリックします。
  5. 検索ページに移動します。
  6. 検索ボタンをクリックします。
  7. 検索結果のリンクをクリックして、更新ページに移動します。
  8. データを更新し、更新ボタンをクリックします。
  9. 更新された結果ページを表示します。
  10. 検索ページに戻ります。
  11. ログアウトボタンをクリックします。

上記のプロセスでは、プロセス番号5〜10に5ループのループコントローラーを使用しました。
そのような状況で、Jmeterテストを実行するために25を超えるスレッドを使用した場合、address already in use, the socket binding exception発生しました。

その問題を解決する方法を知りたいのですが。

4

1 に答える 1

27

クライアントがエフェメラルポートを使い果たしたか、クライアント環境に問題があるようです。
Windowsを使用していますか?

少なくとも次のことができる可能性があります。

  1. Windows:jmeterのホストとしてのWindowsシステムのソリューションについては、この記事を参照してください。
  2. 代わりに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

接続の制限を定義する-もしあれば。

于 2013-01-07T16:51:11.990 に答える