温馨提示×

linux backlog参数有哪些

小樊
45
2026-09-17 13:47:54
栏目: 智能运维

在 Linux 网络编程和系统调优中,backlog 通常出现在 TCP 监听 socket 的上下文中,主要与 listen() 系统调用和内核的连接队列有关。下面是 backlog 相关的核心知识点和参数说明。


一、backlog 是什么?

backloglisten(fd, backlog) 中的参数,用于指定内核为该监听 socket 维护的“未完成 + 已完成连接”队列长度上限(具体含义随内核版本变化)。

int listen(int sockfd, int backlog);

二、Linux 中 backlog 涉及的两个队列

在 Linux 中,TCP 连接建立过程涉及两个队列:

1. 半连接队列(SYN Queue)

  • 存放:收到 SYN,但未完成三次握手 的连接
  • 对应状态:SYN_RCVD
  • 受内核参数控制:net.ipv4.tcp_max_syn_backlog

2. 全连接队列(Accept Queue)

  • 存放:三次握手完成,但应用尚未 accept 的连接
  • 对应状态:ESTABLISHED
  • listen(backlog) 和内核参数共同限制

三、backlog 的实际含义(按内核版本)

✅ Linux 2.2 之后

  • backlog = 全连接队列(accept queue)的最大长度
  • 半连接队列由 tcp_max_syn_backlog 控制

✅ 实际队列长度计算

实际 backlog = min(backlog, net.core.somaxconn)

四、与 backlog 相关的 Linux 参数

1. net.core.somaxconn

  • 全连接队列最大长度上限
  • 默认值:128(老版本)或 4096(新版本)
  • 示例:
sysctl -w net.core.somaxconn=1024

2. net.ipv4.tcp_max_syn_backlog

  • 半连接队列最大长度
  • 默认值:通常为 1024 或 2048
sysctl -w net.ipv4.tcp_max_syn_backlog=8192

3. net.ipv4.tcp_syncookies

  • 当半连接队列满时是否启用 SYN Cookies
  • 推荐开启(防 SYN Flood)
sysctl -w net.ipv4.tcp_syncookies=1

4. net.core.netdev_max_backlog

  • 网络设备接收包的后端队列
  • 与 backlog 间接相关(高并发网络)

五、常见误区

❌ backlog 不是“最大并发连接数”

  • 它只是等待 accept 的连接数

❌ backlog 不受应用层限制

  • 实际受 somaxconn 限制

❌ backlog 越大越好?

  • 过大会:
    • 占用更多内存
    • 掩盖应用 accept 慢的问题

六、如何查看当前队列状态?

查看 listen 队列溢出

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、内核版本),可以告诉我,我可以给更针对性的说明。

0