在测试阶段,前端小姐姐反馈接口返回慢, 查看了一下高峰时间TCP连接的情况,统计命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
发现存在大量TIME_WAIT状态的连接
tcp6 0 0 file.onepass.com:51867 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:52170 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:55700 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:54832 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:44428 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:55182 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:53286 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:56476 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:49767 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:49364 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:41321 file.onepass.com:8848 TIME_WAIT tcp6 0 0 file.onepass.com:58141 file.onepass.com:8848 TIME_WAIT
通过调整内核参数解决 vi /etc/sysctl.conf 编辑文件,
加入以下内容:
net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30
然后执行/sbin/sysctl -p让参数生效。
net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; 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修改系統默认的TIMEOUT时间