CentOS 避免 backlog 堆积的实用方案
一 原理与快速判断
netstat -s | egrep 'listen queue|socket overflowed',若数值持续增长,说明应用 accept 处理不过来。ss -lnt 查看各监听端口的 Send-Q(即当前队列上限),确认是否与配置一致。cat /proc/sys/net/ipv4/tcp_abort_on_overflow,为 1 时在队列满时发送 RST 快速失败,为 0 时倾向于重传 SYN+ACK 等待客户端超时。二 内核与网络参数优化
cat >> /etc/sysctl.conf <<'EOF'
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 200000
net.core.netdev_max_backlog = 16384
EOF
sysctl -p
注:以上为通用起点,需结合压测与监控微调。三 应用与负载均衡层治理
listen 80 default_server backlog 4096;acceptCount="500"(对应 accept 队列溢出时的等待队列)listen.backlog = 4096四 监控与容量规划
netstat -s | egrep 'listen queue|socket overflowed|SYNs to LISTEN sockets dropped'ss -lnt 观察 Recv-Q/Send-Q 与配置上限的差距。top/htop、vmstat、sar -n DEV 等排查 CPU、内存、软中断、网卡 是否成为 accept 瓶颈。