还是一次性能测试过程中,TPS曲线先升后降,响应时间增加,请求没有大量报错,程序无报错,服务器监控发现cpu,io 压力并不大,顺势排查一下链接数,发现出现非常多的TIME_WAIT。
netstat -anp |grep 8080
下面我们上图来讲一下TIME_WAIT这个状态,TIME_WAIT这个状态一般出现四次挥手的阶段,server端收到在接收到最后一个ACK之后产生的状态。
这个时候需要调整linux内核参数 /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_fin_timeout = 10
#表示套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认值是60秒。
net.ipv4.tcp_keepalive_time = 1800
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为30分钟。
注意调整完成要使参数生效
sysctl -p