看起来您的客户端用完了临时端口,或者您的客户端环境有问题。
你在使用 Windows 吗?
您至少可以执行以下操作:
- Windows:查看这篇文章,了解 Windows 系统作为 jmeter 主机的解决方案。
- 改为使用 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
定义连接限制 - 如果有的话。