apache的keepalive on需协同配置keepalivetimeout(3–5秒)、maxkeepaliverequests、mpm模式及后端行为,否则无法真正减少tcp握手、压降延迟、支撑高并发。

Apache 的 KeepAlive On 不是“开了就快”,而是要配对超时、请求数、MPM 模式和后端行为,才能真正减少 TCP 握手、压降延迟、撑住并发。
KeepAliveTimeout 和 MaxKeepAliveRequests 必须协同设
这两个参数决定单个连接能“活多久”和“干多少事”:
- KeepAliveTimeout 3–5 秒:建议设为 3~5 秒。过长(如 >10 秒)会导致空闲连接堆积,worker 线程或进程被长期占用;过短(
- MaxKeepAliveRequests 50–100:设为 50~100 较稳妥。设 0 表示不限制,但异常客户端可能长期霸占连接;设太小(如 10)会让浏览器频繁重连,抵消复用收益
- 两者配合逻辑:一个连接最多服务 100 次请求,或空闲满 5 秒就关闭——任一条件满足即断连
MPM 模式决定 KeepAlive 能不能扛高并发
KeepAlive 效果直接受 Apache 并发模型限制:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 必须用 event MPM:它用异步非阻塞 I/O 管理长连接,万级空闲连接内存开销低;prefork 下每个连接独占一个进程,稍高并发就内存爆炸;worker 虽用线程,但长连接多时仍易线程耗尽
- 切换命令(Debian/Ubuntu):
a2dismod mpm_prefork && a2enmod mpm_event - 验证是否生效:
httpd -V | grep -i mpm输出应含mpm_event
后端服务必须不主动断连
Apache 开了 KeepAlive,若后端响应头写 Connection: close 或自身超时早于 Apache,复用就失效:
- Tomcat 的
server.xml中 Connector 需确保:connectionTimeout="20000"(≥ Apache 的 KeepAliveTimeout),且未设置keepAliveTimeout为极小值 - 禁用代码中手动设置:
response.setHeader("Connection", "close") - 检查真实响应头:
curl -I http://your-proxy/path应返回Connection: keep-alive和Keep-Alive: timeout=5, max=99
HTTPS 场景需额外加固 TLS 复用
HTTP/1.1 over TLS 下,KeepAlive 收益会被重复握手削弱:
- 启用 SSL 会话缓存:
SSLSessionCache shmcb:/var/cache/apache2/ssl_scache(512000) - 关闭 SSL 压缩:
SSLCompression off(防 CRIME 攻击,也提升复用效率) - 确保证书链完整(含 intermediate CA),否则部分客户端在复用连接时会重新校验证书










