10

我正在使用 Jmeter 测试对我的 Web 应用程序的多个请求。
NumberOfThread在 Jmeter 中使用 50。

我的流程如下:

  1. 登录页面。
  2. 使用用户 ID 和密码登录。
  3. 显示菜单页面。
  4. 点击搜索页面。
  5. 进入搜索页面。
  6. 点击搜索按钮。
  7. 点击搜索结果链接进入更新页面。
  8. 更新数据并单击更新按钮。
  9. 显示更新的结果页面。
  10. 返回搜索页面。
  11. 注销按钮单击。

在上述过程中,我将循环控制器用于进程号 5 到 10,循环次数为 5。
在那种情况下,如果我使用超过 25 个线程来运行 Jmeter 测试,就会address already in use, the socket binding exception发生这种情况。

我想知道如何解决这个问题。

4

1 回答 1

27

看起来您的客户端用完了临时端口,或者您的客户端环境有问题。
你在使用 Windows 吗?

您至少可以执行以下操作:

  1. Windows:查看这篇文章,了解 Windows 系统作为 jmeter 主机的解决方案。
  2. 改为使用 Linux 系统作为主机来运行 Jmeter 负载方案。


您可能会发现这篇文章对您的测试活动很有用(我在标签中看到过 Jboss)。


更新:

再次来自上面的链接文章

当发出 HTTP 请求时,会为 TCP/IP 连接分配一个临时端口。临时端口范围为 32678 - 61000。客户端关闭连接后,连接处于 TIME-WAIT 状态 60 秒。

如果 JMeter (HttpClient) 每秒发送数千个 HTTP 请求并创建新的 TCP/IP 连接,系统将用完可用的临时端口来分配。

. . .

否则,JMeter JTL 文件中可能会出现以下消息:

非 HTTP 响应代码:java.net.BindException
非 HTTP 响应消息:地址已在使用中

解决方案是启用快速回收 TIME_WAIT 套接字。

回声 1 > /proc/sys/net/ipv4/tcp_tw_recycle

其他选项包括 TCP_FIN_TIMEOUT 以减少连接处于 TIME_WAIT 状态的时间,以及 TCP_TW_REUSE 允许系统重用处于 TIME_WAIT 状态的连接。

在服务器端:

  • 这可以快速回收 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 设置在许多短连接打开并处于 TIME_WAIT 状态的环境中特别有用,例如 Web 服务器。重用套接字可以非常有效地减少服务器负载。

  • 系统同时持有的最大 timewait 套接字数

    /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 回答