CentOS 环境下 Backlog 的定位与工具化解决
一、先判断 backlog 类型与症状
- 网络连接的 backlog 通常指 TCP 全连接队列(已完成三次握手、等待进程 accept 的连接)与 半连接队列(收到 SYN、尚未完成握手的连接)。全连接队列的实际可用长度为 min(应用 listen(backlog), net.core.somaxconn);半连接队列长度受 net.ipv4.tcp_max_syn_backlog 等影响。若队列溢出,常见现象是客户端偶发连接失败或超时。可用以下工具快速判断:
- 用 ss -lnt 查看监听套接字:LISTEN 状态下 Recv-Q 为当前队列长度,Send-Q 为队列上限;若 Recv-Q > Send-Q 或持续增长,可能存在溢出风险。
- 用 netstat -s | grep -i “overflowed\|listen” 查看全连接队列溢出累计次数是否增长。
- 用 cat /proc/sys/net/core/somaxconn 与 cat /proc/sys/net/ipv4/tcp_max_syn_backlog 查看系统上限。
- 用 ss -s 观察整体 TCP 状态分布(如 SYN-RECV、ESTAB 等)。
二、网络 backlog 的工具化解决步骤
三、若指的是 auditd 的 backlog 超限
- 现象与风险:系统日志出现 “audit: backlog limit exceeded”,可能导致系统响应变慢甚至短暂无响应(常见在审计规则较多或突发大量审计事件时)。
- 工具化解决(auditctl/配置文件):
- 查看当前:auditctl -s(关注 backlog_limit、backlog 等)
- 临时放大缓冲:auditctl -b 8192(示例值)
- 永久生效:编辑 /etc/audit/audit.rules,在文件首行加入 -b 8192,然后重启 auditd(service auditd restart)
- 内存评估:单个审计缓冲约 8970 字节;例如 8192 个缓冲约 ≈ 73 MiB(8192×8970)。根据内存容量合理设置,避免 OOM。
四、配套性能工具与后续优化
- 观测与诊断
- 队列与连接:ss -lnt/-nt/-s、netstat -s、cat /proc/net/sockstat
- 资源与负载:top/htop、vmstat、iostat、sar
- 网卡与中断:ethtool -l/-L(队列数)、ethtool -g/-G(Ring Buffer)、中断绑定(如 irqbalance/手动 smp_affinity)
- 网络栈与网卡协同优化(示例值,需压测验证)
- 加速回收:net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_fin_timeout=30
- 半连接保护:net.ipv4.tcp_syncookies=1(在 SYN 洪泛时保护)
- 本地端口与保活:net.ipv4.ip_local_port_range=1024 65535、net.ipv4.tcp_keepalive_time=1200
- 设备层:适当增大 netdev_max_backlog、启用/优化多队列与中断亲和,减少丢包与软中断瓶颈。