CentOS backlog 常见问题与解答
一 概念与工作机制
netstat -s | grep -i listen;查看监听队列:ss -ltnp | grep :端口。二 常见现象与快速判断
netstat -s | egrep 'listen queue|SYNs to LISTEN' 中的 “times the listen queue of a socket overflowed” 与 “SYNs to LISTEN sockets dropped” 是否持续增长;同时用 ss -ltnp 查看对应监听套接字的 Send-Q(接近或等于全连接队列上限)与 Recv-Q(当前排队连接数)。若全连接队列满且 tcp_abort_on_overflow=1,服务端可能向客户端发送 RST,客户端表现为连接被重置。若半连接队列溢出,常见为 SYN 被丢弃,客户端重传 SYN 仍无法建立连接。三 配置与调优要点
echo "net.core.somaxconn = 32768" >> /etc/sysctl.conf && sysctl -p。调整半连接队列上限:提升 net.ipv4.tcp_max_syn_backlog(如 8192 或更高,视内存与并发而定)。溢出时的行为:按需设置 net.ipv4.tcp_abort_on_overflow(0 丢 ACK 重试,1 回 RST)。抗 SYN 洪泛:在合理范围内开启 net.ipv4.tcp_syncookies=1 作为兜底(注意其改变了半连接队列的严格上限语义)。示例(/etc/sysctl.conf):net.core.somaxconn=32768、net.ipv4.tcp_max_syn_backlog=8192、net.ipv4.tcp_abort_on_overflow=1、net.ipv4.tcp_syncookies=1,执行 sysctl -p 生效。四 应用与服务联动配置
fastcgi_connect_timeout / fastcgi_send_timeout / fastcgi_read_timeout 与 PHP-FPM 的 listen.backlog(如 1024 或更高),并确保 net.core.somaxconn 不低于二者;否则会出现 502/504 或连接被重置等现象。使用 systemd 管理的服务,若通过服务文件设置文件句柄/进程数,需同步调整 DefaultLimitNOFILE 等,以避免“文件描述符不足”限制 accept 能力。使用 Unix Domain Socket 时,除 listen.backlog 外,还需关注内核 net.unix.max_dgram_qlen(如提升到 20000)以避免本地进程间通信队列瓶颈。五 容易混淆的 backlog
auditctl -b 8192 临时调大缓冲,并在 /etc/audit/audit.rules 中加入 -b 8192 持久化;同时评估规则数量与审计级别,避免产生过量审计事件。