centos backlog怎么产生
导读:CentOS 中 backlog 的产生机制 在 CentOS 中,backlog 主要有两类:一类是网络层的 TCP 连接队列 backlog,另一类是审计子系统的 auditd 缓冲区 backlog。前者发生在服务器端套接字接收连接时...
CentOS 中 backlog 的产生机制
在 CentOS 中,backlog 主要有两类:一类是网络层的 TCP 连接队列 backlog,另一类是审计子系统的 auditd 缓冲区 backlog。前者发生在服务器端套接字接收连接时,后者发生在内核审计事件写入用户态审计缓冲区时。
网络 TCP 连接的 backlog 如何产生
- 当服务器监听端口(例如 80/443/22)时,内核会为每个监听套接字维护两个队列:
- 半连接队列(SYN 队列):存放已完成 SYN 但未完成握手的连接;其上限受内核参数 net.ipv4.tcp_max_syn_backlog 与应用传参共同影响。
- 全连接队列(accept 队列):存放已完成三次握手、等待进程 accept() 的连接;其上限受内核参数 net.core.somaxconn 与应用传参共同影响(实际生效值通常取二者较小者)。
- 触发与堆积的常见原因:
- 高并发连接突发,服务端 accept()/业务处理 速度跟不上入队速度。
- SYN Flood 攻击 或网络异常导致半连接队列被大量占用。
- 内核或应用设置的队列上限过小(如 somaxconn、tcp_max_syn_backlog 偏低)。
- 网络 延迟/丢包 使握手完成时间变长,队列更易堆积。
- 应用未正确关闭连接或处理缓慢,导致全连接队列长时间占用。
这些因素综合作用,就会在监听套接字上形成并持续增长 backlog,表现为新连接被丢弃或超时、访问变慢等现象。
审计服务 auditd 的 backlog 如何产生
- auditd 将内核产生的审计事件写入一个内核环形缓冲区(backlog)。当审计事件产生速率高于用户态 auditd 消费速率时,缓冲区就会积压。
- 触发与堆积的常见原因:
- 审计规则过于宽泛(例如大量文件/系统调用监控),产生事件洪峰。
- 磁盘 I/O 慢/满、系统负载高,导致 auditd 写盘或处理不及时。
- 缓冲区上限(backlog_limit)设置偏小。
- 现象与风险:内核日志出现 “audit: backlog limit exceeded”,严重时可能导致系统响应变慢甚至短暂无响应。
- 容量与内存关系(便于理解“产生/堆积”):单个审计缓冲约 8970 字节;默认 backlog_limit=320,约占用 2.7 MiB;若设为 10000,约占用 87 MiB。因此盲目增大需评估内存压力。
快速判断属于哪一类 backlog
- 出现 “audit: backlog limit exceeded” 或审计相关报错,多半是 auditd 缓冲区 积压。
- 出现 新连接超时/拒绝、端口可连但业务无响应,且 ss -lnt 显示 Recv-Q 长期接近或超过 Send-Q,多为 TCP 连接队列 积压。
- 结合监控与日志定位:
- 审计侧:查看 /var/log/messages、journalctl -u auditd 与 ausearch。
- 网络侧:使用 ss -lntp、netstat -napt | grep LISTEN、必要时抓包 tcpdump 观察握手与队列行为。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos backlog怎么产生
本文地址: https://pptw.com/jishu/752384.html
