TCP优化--减少TIME_WAIT提高吞吐

近期做压力测试的时候发现有很多TIME_WAIT,虽然程序吞吐达标,不过还是想进一步的优化下。
由于一台服务器建立的连接数是有限的,也就65535,外加一些不能用的,比如0-1024和其他程序占的。
可以使用命令查看当前服务器可以使用的端口范围,比如目前这台CentOS 6.5

1
2
3
4
5
6
7
lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final

使用命令:

1
cat /proc/sys/net/ipv4/ip_local_port_range

输出

1
32768 61000

代表当前服务器可用端口数为61000-32768=28232,也就是说理论上最多建立的连接就是28232。

在做压力测试的时候,通过命令统计TIME_WAIE的数量为2w+

1
netstat -an |grep TIME_WAIT|wc -l

使用命令增大端口范围

1
echo "5000 65535">/proc/sys/net/ipv4/ip_local_port_range

再次做压力测试时候TIME_WAIT的数量下降的80+。
除了调大端口范围,还可以设置SO_REUSEADDR、TCP连接复用进一步优化。