在 Linux 网络编程和系统调优中,backlog 通常出现在 TCP 监听 socket 的上下文中,主要与 listen() 系统调用和内核的连接队列有关。下面是 backlog 相关的核心知识点和参数说明。
backlog 是 listen(fd, backlog) 中的参数,用于指定内核为该监听 socket 维护的“未完成 + 已完成连接”队列长度上限(具体含义随内核版本变化)。
int listen(int sockfd, int backlog);
在 Linux 中,TCP 连接建立过程涉及两个队列:
SYN_RCVDnet.ipv4.tcp_max_syn_backlogESTABLISHEDlisten(backlog) 和内核参数共同限制backlog = 全连接队列(accept queue)的最大长度tcp_max_syn_backlog 控制实际 backlog = min(backlog, net.core.somaxconn)
net.core.somaxconnsysctl -w net.core.somaxconn=1024
net.ipv4.tcp_max_syn_backlogsysctl -w net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_syncookiessysctl -w net.ipv4.tcp_syncookies=1
net.core.netdev_max_backlogsomaxconn 限制netstat -s | grep listen
或
ss -lnt
ss -lnt
Recv-Q Send-Q Local Address:Port
0 128 :::80
Send-Q ≈ 当前 backlog 限制net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
应用代码:
listen(sockfd, 65535);
如果你指的是 特定场景(如 Nginx、Redis、Java、Go、内核版本),可以告诉我,我可以给更针对性的说明。