在 Linux 中,backlog 通常出现在两个地方,调整方式不同:
listen() 的 backlog)这是最常见的「backlog」,用于 TCP 连接 accept 队列。
listen(sockfd, backlog);
实际 backlog = min(应用backlog, 内核上限)
cat /proc/sys/net/core/somaxconn
临时:
sysctl -w net.core.somaxconn=65535
永久(/etc/sysctl.conf):
net.core.somaxconn=65535
然后:
sysctl -p
用于 SYN_RECV 状态连接
net.ipv4.tcp_max_syn_backlog
查看:
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
修改:
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# 已完成连接队列
net.core.somaxconn = 65535
# 半连接队列
net.ipv4.tcp_max_syn_backlog = 8192
# 快速回收 TIME_WAIT(视场景)
net.ipv4.tcp_tw_reuse = 1
ss -lnt
示例:
LISTEN 0 65535 *:80
其中 65535 就是实际 backlog
somaxconn 太小(默认常是 128)tcp_max_syn_backlog如果你说的是:
可以告诉我具体场景,我给你精确配置。