温馨提示×

linux backlog怎么排查问题

小樊
46
2026-10-11 06:49:54
栏目: 智能运维

在 Linux 里,backlog 通常出现在两个地方,排查思路不一样:


一、网络 backlog(最常见)

指 TCP 监听队列(listen backlog)

1. 常见现象

  • 客户端连接慢、超时
  • accept 队列满
  • SYN 被丢弃
  • 高并发时连接失败

2. 相关参数

# 全连接队列(accept queue)
/proc/sys/net/core/somaxconn

# 半连接队列(SYN queue)
/proc/sys/net/ipv4/tcp_max_syn_backlog

3. 查看当前队列状态

ss -lnt

重点看:

Recv-Q  Send-Q
  • Recv-Q:当前全连接队列长度
  • Send-Q:backlog 上限(min(somaxconn, listen backlog))

示例:

LISTEN 129 128 0.0.0.0:8080

说明:

  • 队列几乎满(129 > 128)

4. 查看是否有 SYN 丢包

netstat -s | grep -i listen

或

cat /proc/net/netstat | grep ListenOverflows
  • ListenOverflows / ListenDrops > 0 → backlog 不够

5. 应用层问题

很多程序 backlog 写死:

  • Nginx:listen 8080 backlog=8192;
  • Java:ServerSocket(port, backlog)
  • Go:net.Listen 默认受 somaxconn 限制

6. 优化方式

# 增大系统级
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535

# 应用显式设置 backlog

二、系统 / 进程 backlog(任务堆积)

如:

  • 队列消费慢
  • 线程池满
  • 消息积压

排查思路

top / htop
  • CPU 是否打满
  • 线程数是否异常
vmstat 1
  • r 列:运行队列长度(backlog 表现)
cat /proc/loadavg
  • load 高但 CPU 不高 → IO 或锁等待

三、通用排查套路

  1. 先确认 backlog 在哪一层(网络 / 应用 / 系统)
  2. 看 队列是否堆积
  3. 看 消费者是否慢
  4. 看 配置是否合理
  5. 必要时加监控(Prometheus / Grafana)

如果你能告诉我:

  • 是 端口连接问题 还是 任务积压
  • 用的什么服务(Nginx / Java / Redis / 自研)

我可以给你更精确的排查命令。

0 踩