环境信息:CenterOS,服务器配置2C4G
问题描述:在压测时,发现错误率很高,查看报错日志提示: Cannot assign requested address【程序对外建立新连接,结果本地端口全部用完导致的异常】
问题分析:由于客户端频繁的连服务器,虽然socket正常关闭,但端口未立即释放,而是会等待60s后释放,导致很多的TIME_WAIT(通过netstat查看),以至于用光了客户端可用的端口号,导致建立新连接时无可用端口,即“Cannot assign requested address”,是客户端的问题不是服务器端的问题。
解决方案:
1、内核参数优化,修改客户端系统内核参数:(需要root权限)
打开配置文件vim /etc/sysctl.conf:在/etc/sysctl.conf文件中加入下列4行参数
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
备注:
net.ipv4.ip_local_port_range = 1024 65535 #设置本地端口范围从1024~65535,共6W+个端口;
net.ipv4.tcp_max_tw_buckets = 5000 #所允许time_wait的最大数,超过则立刻被清除且警告;
net.ipv4.tcp_tw_reuse = 1 #开启tcp_tw重用,允许将TIME-WAIT sockets重新用于新的TCP连接(默认为0,表示关闭);
net.ipv4.tcp_tw_recycle = 1 #开启tcp_tw快速回收,TCP连接中TIME-WAIT sockets的快速回收(默认为0,表示关闭);
2、运行sysctl -p,让内核参数立即生效
————————————————
版权声明:本文为优快云博主「福多多的福」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/Moonlight_16/article/details/121953688
解决CentOS服务器压测时端口耗尽问题
在CentOS环境中进行压力测试时遇到高错误率,问题源于客户端端口在socket关闭后60秒才释放,导致大量TIME_WAIT状态,耗尽了可用端口。为解决此问题,可以通过内核参数优化,调整`/etc/sysctl.conf`文件,增大本地端口范围,限制TIME_WAIT套接字数量,并开启重用和快速回收选项,然后执行`sysctl-p`使设置生效。
1243

被折叠的 条评论
为什么被折叠?



