首页 > 其他分享 >解决单台服务器作为客户端请求高并发时端口被占用完的情况

解决单台服务器作为客户端请求高并发时端口被占用完的情况

时间:2022-11-17 11:11:30浏览次数:36  
标签:端口 单台 tcp ipv4 net proc 客户端

今天领导下达性能指标800吞吐量的任务,只给我一台服务器作为jmeter的客户端,当吞吐量压到400吞吐量左右的时候一直报错,且服务端又没有收到错误的响应,猜测是jmeter客户端问题。

 

 

 拿到生成的文件后发现报错原因如下:Response code:Non HTTP response code: java.net.NoRouteToHostException

 

 问题原因:由于linux服务器可用端口是一个范围端,而我们的jmeter作为客户端向服务器发起请求的时候会随机占用一个端口,请求完成后会释放该端口等待下次调用。但是如果并发数过高,释放时间过长就会导致作为客户端的linux服务器可用端口后不足,从而引发该问题

解决办法:

1.增加可用端口号范围:

我这边用的centos 。查询可用端口号范围:cat  /proc/sys/net/ipv4/ip_local_port_range

 

 发现端口范围过小从而进行修改: echo "5000 64000" > /proc/sys/net/ipv4/ip_local_port_range   我直接改到5000~64000增加了一倍的端口使用范围。

2. 调低端口释放后的等待时间, 默认为60s, 修改为15~30s ,这个可以根据实际情况改动。我设置的是15S.
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
3. 修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0, 修改为1, 释放TIME_WAIT端口给新连接使用。
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
4. 修改tcp/ip协议配置,快速回收socket资源, 默认为0, 修改为1.
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

执行:sysctl -p ,使设置立即生效。

改完后重新启动jmeter,发现600的吞吐量已经不会报错了。但是我再往上压走到1000左右的时候还是会报这个,这个应该就需要再加客户端服务器了。

 

标签:端口,单台,tcp,ipv4,net,proc,客户端
From: https://www.cnblogs.com/cheng9910/p/16898649.html

相关文章