listen 后的 backlog 参数是 apache 全局 listen 指令的可选参数,用于设置内核“已完成连接队列”容量,直接影响高并发短连接下的连接接纳能力;其语法为 listen 8080 65535,仅 apache 2.4.37+ 支持,实际生效值取 min(配置值, net.core.somaxconn),需同步调大系统参数、匹配 mpm 模式及后端 accept-count 才能避免丢连。

Listen 后的 backlog 参数不是 VirtualHost 配置项,而是 Apache 全局监听指令 Listen 的可选参数,直接影响内核“已完成连接队列”容量,对高并发短连接场景下的连接接纳能力起决定性作用。调优目标不是堆高数值,而是让队列长度与系统能力、MPM模型、后端吞吐形成匹配闭环。
明确 backlog 的位置和语法
它写在 Listen 指令末尾,格式为:Listen 8080 65535Listen 192.168.1.10:443 65535
注意:该参数仅在 Apache 2.4.37+ 版本支持;旧版本忽略该值,实际生效上限由 net.core.somaxconn 决定。
为什么 backlog 值过小会丢连接
当客户端完成 TCP 三次握手后,连接进入内核 accept queue 等待 Apache 调用 accept() 取出。若此时队列已满:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 内核丢弃后续 ACK 包,客户端收不到确认,表现为 “Connection timeout” 或反复重发 SYN
- Apache error_log 通常无报错,但
ss -lnt显示对应端口的 Recv-Q 持续接近 backlog 值 - Java 后端 QPS 正常,而 Apache access.log 记录请求数明显偏低
合理设置 backlog 的关键步骤
不能孤立调大,需四层协同:
- 先调系统上限:
sudo sysctl -w net.core.somaxconn=65535,并写入/etc/sysctl.conf持久化 - 再设 Apache Listen:
Listen 80 65535(值 ≤ somaxconn 才有效) - 确认 MPM 模式为
event(推荐)或worker;prefork因进程 fork 开销大,accept 延迟更易导致队列积压 - 后端 Java 服务(如 Tomcat)的
accept-count应设为相同量级(如 65535),避免反向代理和应用层队列错配
监控与验证方法
上线后必须验证是否真正生效:
- 运行
ss -lnt | grep :80,观察 Recv-Q 是否稳定在低位(理想是 0~10) - 对比 Apache access.log QPS 和后端入口监控(如 Spring Boot Actuator 的
http.server.requests),差值应 - 抓包看是否有大量重复 SYN 或缺失 ACK;用
ab -n 10000 -c 2000 http://host/压测,检查失败率是否突增










