一 发现问题:vim
服务器是Linux系统,用jmeter测试接口,发现打开不少的TCP链接,[root@m3-2 bin]# ulimit -n 65535用这个命令设置了总的链接数;进行压测的时候,链接数可能达到50000以上,很容易报错;查看各个状态的TCP个数:
netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a,s[a]}',发现链接状态TIME_WAIT的状态不少,(统计80端口链接数netstat -nat|grep -i 80|wc -l用这个统计也行)。而不报错的接口,打开的TCP链接数比较少,约在15000-25000这样。服务器
初步怀疑是tcp的TIME_WAIT状态太多了,致使链接的时间过长,系统的端口资源被长时间的占用,新的请求,又分配不到资源。tcp
二 解决方式:测试
通过3天多的时间,终于找到了有效的解决方案,能够参考该微博:http://blog.oldboyedu.com/tcp-wait/:spa
在sysctl.conf配置文件中# vim /etc/sysctl.conf,修改为以下的配置:code
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_timestamps = 1
再运行起来,TCP的链接数明显降低了,并且接口的TPC上升了,不容易报错,以下图所示:blog