温馨提示×

怎样查看Linux backlog

小樊
42
2026-08-02 04:00:01
栏目: 智能运维

在 Linux 里,“backlog” 通常指 网络 socket 的半连接/全连接队列,或者 监听队列长度。下面按常见场景说明如何查看。


一、查看 TCP 监听队列(最常见的 backlog)

1️⃣ 查看当前监听端口的 backlog(半连接 & 全连接)

ss -lnt

示例输出:

State      Recv-Q Send-Q Local Address:Port  Peer Address:Port
LISTEN     0      128    0.0.0.0:80          0.0.0.0:*

含义:

  • Recv-Q:当前已完成三次握手、等待应用 accept 的连接数(全连接队列)
  • Send-Q:应用调用 listen() 时设置的 backlog 上限

✅ 如果 Recv-Q 经常接近 Send-Q,说明 backlog 满了,可能发生连接丢弃。


2️⃣ 查看 TCP 半连接队列(SYN 队列)

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

示例:

1024

这是内核允许的最大半连接数。


3️⃣ 查看全连接队列长度限制(somaxconn)

cat /proc/sys/net/core/somaxconn

示例:

4096

⚠️ 应用调用 listen(fd, backlog) 时:

实际 backlog = min(应用 backlog, somaxconn)

二、查看因 backlog 满而丢弃的连接

1️⃣ SYN 被丢弃(半连接队列满)

netstat -s | grep -i syn

或:

ss -s

关注类似:

SYNs to LISTEN sockets dropped

2️⃣ 全连接被丢弃(accept 不及时)

netstat -s | grep -i listen

例如:

times the listen queue of a socket overflowed

三、查看某个服务的 backlog(应用层)

Nginx 示例

nginx -V 2>&1 | grep backlog

或在配置中:

listen 80 backlog=2048;

Java 示例(SpringBoot / Netty)

  • server.tomcat.accept-count(全连接队列)
  • server.tomcat.max-connections

查看是否设置过小。


四、临时/永久调整 backlog(如需要)

临时

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

永久

vim /etc/sysctl.conf

添加:

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

生效:

sysctl -p

五、常见问题总结

现象 原因
连接超时 backlog 过小
SYN 丢包 tcp_max_syn_backlog
accept 不及时 somaxconn 限制
新连接被拒绝 全连接队列溢出

如果你是想查看某个具体服务(如 Nginx、Redis、MySQL)的 backlog,或是在排查连接失败问题,可以告诉我:

  • Linux 发行版
  • 内核版本
  • 具体服务

我可以帮你一步步定位。

0