可以,Linux 的 backlog 是可以调大的,但要注意它受多个因素限制,不是“想调多大就多大”。
下面按常见场景说明。
backlog 常见于两类场景:
TCP 监听队列(listen backlog)
listen(sockfd, backlog);
表示已完成连接(ESTABLISHED)但还没被 accept 的队列长度上限。
内核全连接队列 / 半连接队列
accept queuesyn queue(SYN_RECV)listen(fd, 1024);
但实际生效值会被内核截断。
cat /proc/sys/net/core/somaxconn
常见默认值:
实际 backlog = min(app_backlog, somaxconn)
✅ 调大 somaxconn 才能生效
# 临时
sysctl -w net.core.somaxconn=65535
# 永久
echo "net.core.somaxconn=65535" >> /etc/sysctl.conf
sysctl -p
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
对应:
/proc/sys/net/ipv4/tcp_max_syn_backlog
listen(fd, 65535);
否则应用还是只请求小值。
net.core.netdev_max_backlog=65535
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_syncookies=1 # 防止 SYN flood,但会“吃掉”半连接
ss -lnt
示例:
LISTEN 0 65535 :::8080
第 2 个数字是当前 backlog 上限。
✅ backlog 可以调大
✅ 必须同时改:
net.core.somaxconntcp_max_syn_backloglisten() 参数如果你愿意,可以告诉我:
我可以给你一套精确参数建议。