温馨提示×

Linux backlog怎样调整

小樊
36
2026-08-28 13:31:08
栏目: 智能运维

在 Linux 中,“backlog” 通常指 网络 socket 的监听队列长度,常见于 listen() 系统调用。下面从 概念、默认值、如何调整、验证方法 四个方面说明。


一、什么是 backlog

在 TCP 服务中:

listen(fd, backlog);

backlog 表示 已完成连接(ESTABLISHED)但还未被应用 accept() 的最大队列长度

现代 Linux 中实际行为:

  • backlog ≤ /proc/sys/net/core/somaxconn
  • 实际生效值 = min(backlog, somaxconn)

二、查看当前 backlog 相关参数

1️⃣ 查看系统最大 backlog 限制

cat /proc/sys/net/core/somaxconn

常见默认值:

  • 很多发行版:128
  • 高并发服务器建议:1024 / 2048 / 4096

2️⃣ 查看 TCP SYN 队列长度

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

默认常见值:256 / 512 / 1024


三、如何调整 backlog

✅ 方法一:临时调整(重启失效)

sudo sysctl -w net.core.somaxconn=4096
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192

✅ 方法二:永久调整(推荐)

编辑:

sudo vi /etc/sysctl.conf

添加或修改:

net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192

使配置生效:

sudo sysctl -p

四、应用程序中如何设置 backlog

示例(常见服务)

Nginx

listen 80 backlog=4096;

或在 nginx.conf

listen 80 default backlog=4096;

Redis

tcp-backlog 4096

(需确保 somaxconn ≥ 4096


程序代码(C / Java / Go)

  • C:
listen(fd, 4096);
  • Java:
serverSocket.bind(new InetSocketAddress(port), 4096);
  • Go:
http.ListenAndServe(":80")

(Go 默认使用系统限制)


五、验证是否生效

1️⃣ 查看当前监听队列

ss -lnt

示例:

LISTEN 0 4096 0.0.0.0:80

第二个数字就是 当前 backlog


2️⃣ 查看半连接/全连接情况

netstat -s | grep -i list

或:

ss -s

六、常见误区

❌ backlog 设置得越大越好
✅ 实际受 somaxconn 限制

❌ backlog 能解决所有性能问题
✅ 只能是 accept 不及时 的缓冲

❌ backlog 能防止 SYN Flood
✅ 应使用 tcp_syncookies


七、典型推荐配置(高并发)

net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1

如果你能说明 具体场景(如 Nginx / Redis / Java 服务 / Docker / Kubernetes),我可以给你 更精准的配置方案

0