在请求数比较大的场景下,你可能会看到大量处于TIME. WAIT
状态的连接,它们会占用大量内存和端口资源。这时,我们可以优化与TIME_ WAIT
状态相关的内核选项,比如采取下面几种措施。
增大处于 TIME_WAIT 状态的连接数量 net.ipv4.tcp_max_tw_buckets
,并增大连接跟踪表的大小 net.netfilter.nf_conntrack_max
。
减小 net.ipv4.tcp_fin_timeout
和 net.netfilter.nf_conntrack_tcp_timeout_time_wait
,让系统尽快释放它们所占用的资源。
开启端口复用 net.ipv4.tcp_tw_reuse
。这样,被 TIME_WAIT
状态占用的端口,还能用到新建的连接中。
增大本地端口的范围 net.ipv4.ip_local_port_range
。这样就可以支持更多连接,提高整体的并发能力。
增加最大文件描述符的数量。你可以使用fs.nr_open
和 fs.file-max
,分别增大进程和系统的最大文件描述符数;或在应用程序的 systemd
配置文件中,配置 LimitNOFILE
,设置应用程序的最大文件描述符数。