温馨提示×

linux backlog怎么排查

小樊
36
2026-10-08 07:32:30
栏目: 智能运维

在 Linux 里说到 backlog,通常有几种常见场景,排查方式不一样。我先按最常见的情况给你分类说明,你可以对号入座。


一、TCP 连接 backlog(最常见)

指 listen() 的 accept queue(全连接队列) 和 syn queue(半连接队列)。

1. 查看是否有连接堆积

ss -lnt

重点看:

  • Recv-Q:当前已完成握手、等待 accept 的连接数
  • Send-Q:backlog 设置值(如 listen(fd, 128))

示例:

LISTEN 129 128 *:80 *:*

Recv-Q > Send-Q → accept queue 满了

2. 查看溢出情况

netstat -s | grep -i listen

关注:

  • listen queue errors
  • times the listen queue of a socket overflowed

有数值且持续增长 → backlog 太小或进程 accept 太慢

3. 相关内核参数

sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog
  • somaxconn:限制 listen backlog 上限
  • tcp_max_syn_backlog:半连接队列大小

调大示例:

sysctl -w net.core.somaxconn=4096

应用层也要改(如 Nginx):

listen 80 backlog=4096;

二、应用层 backlog(如 Nginx / Redis / 自写服务)

Nginx

listen 80 backlog=1024;
worker_connections 10240;

查看进程是否处理慢

top
pidstat -p <pid> 1

或:

strace -p <pid> -e accept,epoll_wait

三、消息队列 / 任务队列 backlog

如 Kafka、RabbitMQ、Celery

通用排查思路

  • 消费速度 < 生产速度
  • 消费者数量不足
  • 消费者阻塞(DB慢、锁、GC)

查看:

# Kafka
kafka-consumer-groups.sh --describe

# RabbitMQ
rabbitmqctl list_queues

四、磁盘 / IO backlog(较少叫 backlog)

如:

iostat -x 1

await、util 高 → IO 积压


五、快速自检清单

✅ ss -lnt 看 Recv-Q
✅ netstat -s 看 overflow
✅ somaxconn 是否太小
✅ 应用是否 accept 慢
✅ 是否需要扩容消费者


如果你能告诉我:

  • 是 哪个服务(Nginx / Redis / 自写程序 / 消息队列)
  • 报错信息或现象(timeout / 连接失败 / 延迟高)

我可以直接给你针对性的排查命令和解决方案。

0 踩