参考文章:https://blog.csdn.net/liu_baoqing/article/details/51306647
最近在测试环境发现请求总是很慢,有的时候还会存在请求失败的问题,查询资料排查了一下,测试环境在内网,因为上个版本要调试微信公众号,在外网182开了一个二级域名并代理穿透到内网233,前后端分离的情况下(前端使用的vue),前端打包用的外网的域名调的后端的API,但是本次版本测试使用的是内网域名测试的。
问题就产生了,测试人员在用内网域名访问页面的时候,js使用了外网的域名再穿透到了内网,最后造成服务无法确认的返回数据是否客户端接收到了,一直处于等待状态,造成了大量的close_wait,处理方法:
在linux中查看socket状态的命令:
netstat -nt | awk '{wait[$NF]++}END{for(i in wait) print i,wait[i]}'
然后查看处于CLOSE_WAIT的都是哪些端口:
netstat -nt | awk '{if($NF=="CLOSE_WAIT"){wait[$5]++}}END{for(i in wait) print i,wait[i]}'
修改/etc/sysctl.conf配置:
net.ipv4.tcp_tw_reuse = 1 #表示开启重用。允许将TIME_WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1 #表示开启TCP连接中TIME_WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN队列的长度,加大容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 60000 #表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。
PS:最后还是让前端重新用内网域名打包,问题解决QAQ