温馨提示×

linux backlog怎样设置

小樊
44
2026-09-26 14:58:29
栏目: 智能运维

在 Linux 中,“backlog” 通常出现在 网络编程(TCP 监听队列) 或 内核 / 系统参数 场景里。下面分几种常见情况说明如何设置。


一、TCP 监听 backlog(最常见)

1. 在应用程序中设置

在调用 listen() 时指定 backlog:

listen(sockfd, backlog);
  • backlog 表示 已完成连接(ESTABLISHED)队列长度上限
  • 实际值受内核参数限制(见下)

2. 内核限制(关键)

Linux 实际生效的 backlog 是:

min(backlog, /proc/sys/net/core/somaxconn)

查看当前限制

cat /proc/sys/net/core/somaxconn

默认一般是 128 或 4096(取决于发行版)

临时修改

sysctl -w net.core.somaxconn=65535

永久修改

编辑 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf:

net.core.somaxconn = 65535

然后执行:

sysctl -p

二、半连接队列(SYN queue)backlog

用于 TCP 三次握手未完成连接:

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

修改

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

永久:

net.ipv4.tcp_max_syn_backlog = 8192

三、Nginx 中的 backlog

listen 80 backlog=65535;

⚠️ 同样受 somaxconn 限制


四、Redis / 其他服务

Redis 示例:

tcp-backlog 65535

前提:

net.core.somaxconn = 65535

五、查看当前连接队列状态(排查问题)

ss -lnt

示例输出:

State  Recv-Q Send-Q Local Address:Port
LISTEN 0      128    *:80
  • Send-Q 即当前 backlog 上限

六、常见误区

❌ backlog 越大越好
✅ 应根据并发量和内存合理设置

❌ 只改应用不改进内核
✅ 必须同步调整 somaxconn


如果你能告诉我:

  • 用的是 哪种服务(Nginx / Redis / 自写程序)
  • 遇到的是 连接被拒 / 队列溢出 / 性能问题

我可以给你更精确的建议。

0 踩