温馨提示×

linux backlog怎么调整

小樊
38
2026-09-02 09:11:58
栏目: 智能运维

在 Linux 中,backlog 通常出现在两个地方,调整方式不同:


一、TCP 监听队列 backlog(listen() 的 backlog)

这是最常见的「backlog」,用于 TCP 连接 accept 队列

1️⃣ 应用程序层

listen(sockfd, backlog);
  • 这是应用请求值
  • 实际生效值受内核限制

2️⃣ 内核限制(关键)

实际 backlog = min(应用backlog, 内核上限)

查看当前上限

cat /proc/sys/net/core/somaxconn

修改 somaxconn(全局)

临时:

sysctl -w net.core.somaxconn=65535

永久(/etc/sysctl.conf):

net.core.somaxconn=65535

然后:

sysctl -p

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

用于 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


五、常见误区 ⚠️

  • ❌ 只改应用 backlog 不生效
  • somaxconn 太小(默认常是 128)
  • ❌ 高并发服务没调 tcp_max_syn_backlog

如果你说的是:

  • Nginx / Redis / MySQL 的 backlog
  • epoll / accept 队列满了
  • 容器 / K8s 环境

可以告诉我具体场景,我给你精确配置。

0