tcp_max_syn_backlogs
Overview
tcp_max_syn_backlog 是 Linux 内核的一个重要网络参数,用于控制 SYN 队列(半连接队列)的最大长度。这个队列保存了那些已经收到客户端 SYN 包、但还未完成三次握手的连接请求。
当服务器面临大量并发连接请求(如 DDoS、瞬间高并发、爬虫等)时,如果 tcp_max_syn_backlog 设置过小,会导致:
- 新的连接请求被丢弃。
- 客户端出现 Connection refused 或超时。
- 服务无法及时响应。
默认值:
- 旧版 Linux(如 CentOS 6):1024
- 较新系统(支持 SYN Cookies):4096、8192 或更高
- 某些云服务器:可能为 65535
查看和配置
查看当前 tcp_max_syn_backlog 值
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
# 或
sysctl net.ipv4.tcp_max_syn_backlog
配置tcp_max_syn_backlog
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535
方法 1:修改 /etc/sysctl.conf
sudo vim /etc/sysctl.conf
# 添加或修改
net.ipv4.tcp_max_syn_backlog = 65535
# 保存
sudo sysctl -p
方法 2:创建专用配置文件(推荐)
sudo vim /etc/sysctl.d/99-tcp-syn-backlog.conf
添加内容
net.ipv4.tcp_max_syn_backlog = 65535
加载配置:
验证结果
检查参数是否加载
sysctl net.ipv4.tcp_max_syn_backlog
# 输出应为 65535
查看当前半连接状态(可选)
# 查看处于 SYN_RECV 状态的连接数
ss -an | grep SYN_RECV | wc -l
查看监听端口的 Send-Q(全连接队列)
输出结果
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 65535 *:80 *:*
Send-Q 显示的是 min(somaxconn, 应用 backlog),应与你设置的值一致。
推荐值(根据场景)
| 场景 | 推荐 tcp_max_syn_backlog |
| 普通 Web 服务 | 4096 ~ 16384 |
| 高并发 API 服务、网关 | 32768 |
| Redis / MySQL 高负载 | 65535 |
| 抗 DDoS / 高性能网关 | 65535 + 启用 tcp_syncookies |
优化网络性能相关参数
# 启用 SYN Cookies(防止 SYN Flood 攻击)
net.ipv4.tcp_syncookies = 1
# 调大接受连接队列(全连接队列上限)
net.core.somaxconn = 65535
# 增加网络设备接收队列长度
net.core.netdev_max_backlog = 5000
# 可选:减少 SYN 重试次数(加快资源释放)
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3