首页主机资讯centos backlog如何处理

centos backlog如何处理

时间2026-01-16 09:24:04发布访客分类主机资讯浏览965
导读: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。例如设置为 819287 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 overflowSYNs to LISTEN sockets dropped 是否下降;业务侧超时/拒绝是否缓解。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos backlog如何处理
本文地址: https://pptw.com/jishu/781194.html
centos清理缓存的有效技巧 怎么理解centos中的copendir命令

游客 回复需填写必要信息