listenbacklog是apache控制内核accept队列长度的参数,需与net.core.somaxconn、tomcat accept-count等协同调优;默认511易致连接超时丢弃,须显式配置listen 80 65535并同步调高系统及后端参数。

调整 Apache 的 ListenBacklog 是应对突发高并发连接的关键一步,但它不是单独生效的配置项,必须和系统内核参数、MPM 模式、后端服务协同调优。默认值 511 在流量高峰时极易打满,导致客户端连接超时、重传 SYN,但 Apache 日志里却看不到明显错误。
确认当前 ListenBacklog 实际生效值
Apache 不会报错提示 backlog 被截断,它会静默取 min(配置值, net.core.somaxconn) 作为最终值。所以第一步是验证:
- 查系统限制:
sysctl net.core.somaxconn(常见默认为 511 或 128) - 查 Apache 监听队列占用:
ss -lnt | grep :80,关注 Recv-Q 列——若长期接近 511,说明已满 - 确认 Apache 是否显式设置了 ListenBacklog:检查
httpd.conf或ports.conf中是否有ListenBacklog行;若无,则继承系统值
三步设置 ListenBacklog 并确保生效
只改 Apache 配置没用,必须同步打通系统层和应用层:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
调高系统全连接队列上限:执行
sudo sysctl -w net.core.somaxconn=65535,并写入/etc/sysctl.conf永久生效 -
在 Apache 中显式声明 ListenBacklog:语法为
Listen 80 65535(注意不是ListenBacklog 65535——该指令在新版 Apache 中已废弃,Listen后直接跟 backlog 值才是正确写法) -
匹配 MPM 处理能力:若用
event或worker,确保MaxRequestWorkers≥ backlog 值;若仍用prefork,则需同步调大MaxRequestWorkers,否则连接进得来、取不出
关联后端与网络层必须同步调整
Apache 的 backlog 只是入口,后面还有 Tomcat、PHP-FPM、内核半连接队列等环节,任一卡点都会让前端调优失效:
- Tomcat 的
accept-count(Spring Boot 对应server.tomcat.accept-count)建议设为 65535,与 Apache 对齐 - 启用内核半连接队列扩容:
net.ipv4.tcp_max_syn_backlog = 65535 - 检查
ulimit -n,至少设为 65535,避免子进程因文件描述符不足无法 accept 新连接 - 若用反向代理,确认 upstream 如 php-fpm 的
pm.max_children≥ Apache 并发处理能力
验证是否真正起效
改完不能只看配置,要观察真实链路行为:
- 再跑
ss -lnt,确认目标端口的 Recv-Q 不再持续打满 - 用短连接压测工具(如 wrk -c 10000 -t 10)观察客户端是否仍有大量 timeout 或重传 SYN
- 对比 Apache access.log QPS 和上游负载生成器的请求速率,差值应显著缩小
- 抓包确认三次握手是否完整(SYN → SYN-ACK → ACK),而非卡在 ACK 丢弃










