![cover](https://img-blog.csdnimg.cn/2c56334d2df54a978f78ac231a6fe17f.png)
Jmeter使用Linux做负载机测试时报错 Cannot assign requested address (Address not available)
环境:使用jmeter做压力测试的时候,我使用单机测试并且和服务器是在同一台机器上面压测。现象:脚本运行时报错Cannot assign requested address (Address not available)解决过程:在网上百度都是说端口不够用,我使用netstat -tunlp命令查询发现并没有占用多少端口,几经辗转,最后发现是ip的问题,我的jmeter脚本里面写的是服务器的固定i
·
-
环境:使用jmeter做压力测试的时候,我使用单机测试并且和服务器是在同一台机器上面压测。
-
现象:脚本运行时报错Cannot assign requested address (Address not available)
-
情况一、在网上百度都是说端口不够用,我使用netstat -tunlp命令查询发现并没有占用多少端口,几经辗转,最后发现是ip的问题,我的jmeter脚本里面写的是服务器的固定ip,由于在同一台机器上需要改成localhost才行,我尝试127.0.0.1也是不可以的。
-
情况二、端口不够用,这种情况使用网上说的修改端口的配置
- 在压测时查看服务器和客户机等待的端口数量
netstat -na|grep TIME_WAIT | wc -l - 查看开发的端口范围
cat /proc/sys/net/ipv4/ip_local_port_range
如果范围很小,则进行修改
echo “1024 65535” > /proc/sys/net/ipv4/ip_local_port_range - 调低端口释放后的等待时间, 默认为60s, 修改为15~30s
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout - 修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0, 修改为1, 释放TIME_WAIT端口给新连接使用。
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse - 修改tcp/ip协议配置,快速回收socket资源, 默认为0, 修改为1.
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
执行:sysctl -p ,使设置立即生效。
- 在压测时查看服务器和客户机等待的端口数量
-
情况三、我们压测的时候发送的请求特别多,而我们的端口数最大是65535,如果每个请求都单独占用一个端口那肯定是不够用的,
通过命令查看 netstat -na|grep TIME_WAIT | wc -l 每次都很大,这时候看一下jmeter脚本的keepAlive是否勾选,我们需要勾选这个框就可以解决上述问题,原因参考yygr的文章—JMeter基础 – Keep-Alive在性能压测中的影响jmeter在发送http请求时,默认带有keep-alive,但我们通过查看jmeter配置文件发现并没有相关有效的连接时长配置,可以认定:jmeter中的请求都是无等待请求,response time约等于零,一旦连接数据接收完毕,或者接口处于空闲状态,连接便会断开 所以在不修改jmeter默认配置情况下,每个线程都是独立的、全新的,无论是否勾选keep-alive,请求都不受影响(服务端强制要求短连接除外) 在详细了解TCP连接的状态和关闭方式后,我们会发现TIME_WAIT状态是一个坑爹的存在!主动关闭连接的一方在发送最后一个ACK包后,无论对方是否收到都会进入TIME_WAIT状态,等待2MSL的时间,然后才能释放网络资源。MSL就是Maximum Segment Lifetime(数据包的最大生命周期),是一个数据包能在互联网上生存的最长时间,若超过这个时间则该数据包将会消失在网络中。操作系统通常会将2MSL设为4分钟,最低不少于30秒,因而TIME_WAIT状态一般维持在30秒至4分钟; 对于Client而言,每个连接都需要占用一个端口,而系统允许的可用端口数不足65000个(这也是在TCP参数优化后才能达到)。因此,如果Client发起过多的连接且连接未关闭,就会有大量的连接处于TIME_WAIT状态,等待2MSL的时间后才能释放端口,于是Client会由于缺少可用端口而无法新建连接。
更多推荐
所有评论(0)