TCP
套接字优化
调整缓冲区
增大套接字的缓冲区 net.core.optmem_max
增大套接字接收缓冲区 net.core.rmem_max 和发送缓冲区 net.core.wmem_max
增大 TCP 接收缓冲区 net.ipv4.tcp_rmem 和发送缓冲区 net.ipv4.tcp_wmem
修改网络连接行为
为 TCP 连接设置 TCP_NODELAY 可禁用 Nagle 算法
为 TCP 连接开启 TCP_CORK 可让小包聚合成大包后再发送(会阻塞小包发送)
使用 SO_SNDBUF 和 SO_RCVBUF 分别调整套接字发送缓冲区和接收缓冲区大小
TIME_WAIT 状态
使用 TCP 长连接代替短连接
增大处于 TIME_WAIT 状态的连接数量 net.ipv4.tcp_max_tw_buckets
开启端口复用 net.ipv4.tcp_tw_reuse,被 TIME_WAIT 状态占用的端口还能用到新连接中
减小 TIME_WAIT 时间 net.ipv4.tcp_fin_timeout 和 net.netfilter.nf_conntrack_tcp_timeout_time_wait
增大连接跟踪表的大小 net.netfilter.nf_conntrack_max
增大本地端口的范围 net.ipv4.ip_local_port_range 以支持更多连接、提高整体并发
文件描述符
使用 fs.nr_open 和 fs.file-max 分别增大进程和系统的最大文件描述符数
在应用程序的 systemd 配置中设置应用程序的最大文件描述符数 LimitNOFILE
用户可打开文件的最大数目 ulimit -n 和 /etc/security/limits.conf nofile
用户可开启进程/线程的最大数目 ulimit -u 和 /etc/security/limits.conf noproc
高负载下缓解 SYN FLOOD
二选其一
增大 TCP 半连接最大数量 net.ipv4.tcp_max_syn_backlog
开启 TCP SYN Cookies net.ipv4.tcp_syncookies 绕开半连接数量限制
减少 SYN_RECV 状态连接重传 SYN+ACK 包次数 net.ipv4.tcp_synack_retries
调整客户端主动建立连接时 SYN 重发次数 net.ipv4.tcp_syn_retries<br>
客户端应用层延长 connect 超时时间
增大本地端口的范围 net.ipv4.ip_local_port_range 以支持更多连接、提高整体并发
Keepalive 优化
缩短最后一次数据包到 Keepalive 探测包的间隔时间 net.ipv4.tcp_keepalive_time
缩短发送 Keepalive 探测包的间隔时间 net.ipv4.tcp_keepalive_intvl
减少 Keepalive 探测失败后,一直到通知应用程序前的重试次数 net.ipv4.tcp_keepalive_probes
TFO 提高三次握手性能
开启 TFO 功能 net.ipv4.tcp_fastopen<br>
UDP
增大套接字缓冲区大小以及 UDP 缓冲区范围
增大本地端口号的范围
根据 MTU 大小调整 UDP 数据包大小,减少或避免分片