centos backlog如何处理
导读:CentOS 中 backlog 的定位与处理 一、先判定 backlog 类型 网络连接的 backlog 通常指 TCP 的监听队列,包含: 半连接队列(SYN queue):存放收到 SYN 尚未完成三次握手的连接,受内核参数 n...
CentOS 中 backlog 的定位与处理
一、先判定 backlog 类型
- 网络连接的 backlog 通常指 TCP 的监听队列,包含:
- 半连接队列(SYN queue):存放收到 SYN 尚未完成三次握手的连接,受内核参数 net.ipv4.tcp_max_syn_backlog 影响。
- 全连接队列(Accept queue):存放已完成三次握手、等待应用调用 accept() 的连接。其上限为应用传入的 listen(backlog) 与内核 net.core.somaxconn 的较小值。队列满时的行为受 net.ipv4.tcp_abort_on_overflow 影响(0 丢弃客户端 ACK、重传 SYN+ACK;1 直接回 RST)。
- 若日志出现 audit: backlog limit exceeded,这是 Linux 审计服务 auditd 的审计缓冲区队列溢出,和网络 backlog 不是同一概念。
二、快速排查与定位
- 查看全连接队列是否溢出与半连接丢弃:
- 溢出计数:netstat -s | egrep ‘listen queue (of|drop)’
- 实时监听队列:ss -lnt | egrep ‘(:80|:443|:9000)’
- 观察半连接压力(SYN_RECV 多):ss -s 或 netstat -n | awk ‘/^tcp/ { ++S[$NF]} END { for(a in S) print a, S[a]} ’
- 检查当前系统上限与生效值:
- cat /proc/sys/net/core/somaxconn
- cat /proc/sys/net/ipv4/tcp_max_syn_backlog
- cat /proc/sys/net/ipv4/tcp_abort_on_overflow
- 应用层确认:确保服务(如 Nginx/php-fpm)的 listen backlog 与内核上限匹配,且应用 accept() 能力足够。
三、网络 backlog 的优化步骤
- 调整全连接队列上限(内核与业务两端匹配)
- 临时:echo 32768 > /proc/sys/net/core/somaxconn
- 永久:在 /etc/sysctl.conf 加入 net.core.somaxconn = 32768 并执行 sysctl -p
- 同步提升应用 backlog(如 Nginx 的 listen … backlog=…;php-fpm 的 listen.backlog),避免“木桶效应”。
- 调整半连接队列与握手行为
- 临时:echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
- 永久:在 /etc/sysctl.conf 加入 net.ipv4.tcp_max_syn_backlog = 8192
- 开启 net.ipv4.tcp_syncookies = 1(在 SYN 洪泛时保护)
- 视场景设置 net.ipv4.tcp_abort_on_overflow = 1(队列满时快速失败,便于客户端快速重试)
- 缓解 TIME_WAIT 压力(仅当观测到大量 TIME_WAIT 且影响新连接时)
- net.ipv4.tcp_tw_reuse = 1(对客户端侧连接重用更安全)
- 谨慎使用 net.ipv4.tcp_tw_recycle(在 NAT/负载均衡 场景可能有害,很多发行版在新内核已移除或默认关闭)
- 适度降低 net.ipv4.tcp_fin_timeout、限制 net.ipv4.tcp_max_tw_buckets
- 其他与并发相关的通用项(按需)
- 提升本地端口范围:net.ipv4.ip_local_port_range = 10000 65000
- 提升网卡接收队列:net.core.netdev_max_backlog = 16384
- 调整 TCP 内存与文件句柄上限(结合内存与业务评估,避免盲目放大)。
四、审计 backlog 的处理(若日志出现 audit 报错)
- 计算与调整审计缓冲:
- 单缓冲约 8970 字节;默认 backlog_limit=320,约 2.7 MiB。例如设置为 8192 约 87 MiB。
- 临时:auditctl -b 8192
- 永久:在 /etc/audit/audit.rules 顶部加入 -b 8192,重启 auditd
- 风险提示:增大审计缓冲会占用更多内存;若非合规刚需,勿盲目开启大量审计规则。
五、参数建议与生效验证
- 建议起步值(需结合业务压测微调):
- net.core.somaxconn = 32768
- net.ipv4.tcp_max_syn_backlog = 8192
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_abort_on_overflow = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.ip_local_port_range = 10000 65000
- net.core.netdev_max_backlog = 16384
- 生效与验证:
- sysctl -p 使配置生效
- 复查:ss -lnt 的 Send-Q 是否接近上限;netstat -s 的 listen queue overflow 与 SYNs to LISTEN sockets dropped 是否下降;业务侧超时/拒绝是否缓解。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos backlog如何处理
本文地址: https://pptw.com/jishu/781194.html
