首页主机资讯centos backlog怎么办

centos backlog怎么办

时间2025-11-20 20:07:04发布访客分类主机资讯浏览1100
导读:CentOS 出现 backlog 问题的定位与处理 一、先判断是哪一类 backlog 常见有两类: TCP 连接队列:包含“半连接队列”(SYN_RECV)与“全连接队列”(已完成三次握手、等待进程 accept)。全连接队列的实际...

CentOS 出现 backlog 问题的定位与处理

一、先判断是哪一类 backlog

  • 常见有两类:
    • TCP 连接队列:包含“半连接队列”(SYN_RECV)与“全连接队列”(已完成三次握手、等待进程 accept)。全连接队列的实际上限是应用 listen(backlog) 与内核 net.core.somaxconn 的较小值;半连接队列受 net.ipv4.tcp_max_syn_backlog 等影响。
    • 审计日志 backlog:内核审计子系统(auditd)缓冲区溢出,日志出现 “audit: backlog limit exceeded”。该值与内存占用直接相关。

二、TCP 连接队列满载的排查与处理

  • 快速判断
    • 查看全连接队列使用:ss -lnt | grep :端口,关注 Recv-Q(当前队列长度)与 Send-Q(队列上限)。例如看到 Send-Q 为 128,说明上限仅 128。
    • 检查是否发生溢出:watch -n1 “netstat -s | egrep ‘listen queue|overflowed|drop’”,若 “listen queue overflowed” 或 “packet dropped because of full socket buffer” 持续增长,说明队列经常满。
    • 观察半连接:ss -s | grep SYN_RECV 或 netstat -an | grep SYN_RECV | wc -l,数量异常升高常见于半连接积压。
    • 溢出行为控制:cat /proc/sys/net/ipv4/tcp_abort_on_overflow;为 0 时队列满会丢弃客户端的 ACK(更平滑),为 1 时直接回 RST(便于快速定位问题,但客户端会见到 “connection reset by peer”)。
  • 立即缓解
    • 提升应用 backlog:例如 Nginx 在 listen 80 backlog=8192;PHP-FPM 设置 listen.backlog=1024(常见默认值为 511)。注意最终上限仍受内核限制。
    • 提升内核上限(临时生效):
      • echo 16384 > /proc/sys/net/core/somaxconn
      • echo 16384 > /proc/sys/net/ipv4/tcp_max_syn_backlog
      • echo 32768 > /proc/sys/net/core/netdev_max_backlog
    • 持久化(写入 /etc/sysctl.conf 后执行 sysctl -p):
      • net.core.somaxconn = 16384
      • net.ipv4.tcp_max_syn_backlog = 16384
      • net.core.netdev_max_backlog = 32768
    • 半连接攻击/突发 SYN 场景:开启 net.ipv4.tcp_syncookies=1 提升抗洪能力(仅在队列溢出风险高时启用)。
  • 根本优化
    • 加快应用 accept 能力:增加 worker 进程/线程、优化 accept 循环、使用异步 I/O,确保能“消费”队列。
    • 限流与削峰:通过 iptables/tc 或前置 HAProxy/Nginx 做连接限速与分发,避免单机瞬时过载。
    • 观测与回归:压测验证队列是否仍满,并持续监控 Recv-Q/Send-Q 与溢出计数。

三、审计日志 backlog 超限的处理

  • 现象与风险
    • 系统日志出现 “audit: backlog limit exceeded”,严重时可导致 SSH 卡死/无法登录、系统无响应。
  • 处理步骤
    • 查看当前审计状态与缓冲:auditctl -s(关注 backlog_limit、lost 等)。
    • 调整缓冲上限(临时):auditctl -b 8192(示例值)。内存估算:单个审计缓冲约 8970 字节,例如 10000 个缓冲约 87 MiB
    • 永久生效:编辑 /etc/audit/audit.rules,在合适位置加入 “-b 8192”(或所需值),然后重启 auditd:service auditd restart。
    • 不建议直接禁用 auditd(会降低安全审计能力)。如确需临时处置,可在确保合规的前提下停用,再恢复并优化规则与缓冲。

四、常用参数与推荐起点

参数 作用 建议起点(按并发逐步调大)
net.core.somaxconn 全连接队列上限(与应用 backlog 取小) 16384
net.ipv4.tcp_max_syn_backlog 半连接队列上限 16384
net.core.netdev_max_backlog 网卡接收队列 32768
net.ipv4.tcp_abort_on_overflow 队列满时是否回 RST 排查期设 1,稳定期 0
net.ipv4.tcp_syncookies SYN 洪泛保护 1(仅在风险高时启用)
audit.rules “-b” 审计缓冲上限 依据内存与丢失情况逐步上调(如 8192
  • 应用侧配合示例:Nginx listen backlog=8192;PHP-FPM listen.backlog=1024。调大内核与应用的数值后,务必压测并观察队列与溢出指标,避免“设过大却无法被消费”的资源浪费。

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


若转载请注明出处: centos backlog怎么办
本文地址: https://pptw.com/jishu/752386.html
centos backlog怎么查看 怎么在centos中执行copendir命令

游客 回复需填写必要信息