apache性能调优核心是围绕业务特征、资源瓶颈和响应链路系统性优化,目标是降低页面加载时间、api延迟及高并发错误率;需选对mpm(prefork适配mod_php,event适配php-fpm/静态服务),合理配置keepalive(on、timeout 7、maxkeepaliverequests 150),分层启用缓存、压缩与日志精简,并通过ab或wrk验证效果。

Apache性能调优不是堆参数,而是围绕业务请求特征、资源瓶颈和响应链路做系统性收敛。核心目标是让每个请求走得更快、更稳、更省资源——最终体现为用户感知的页面加载时间下降、API平均延迟降低、高并发下错误率趋近于零。
选对MPM并匹配硬件资源
MPM是Apache并发能力的底层引擎,选错等于给跑车装拖拉机变速箱:
-
PHP传统部署(mod_php)优先用 prefork:进程隔离安全,但内存开销大;需按可用内存反推
MaxRequestWorkers,公式≈总内存×0.8 ÷ 单进程平均内存(通常40–60MB) -
PHP-FPM + FastCGI 或纯静态/代理场景用 event:线程轻量、异步处理Keep-Alive连接;重点调
ThreadsPerChild(建议50–100)和MaxRequestWorkers(建议1000+),确保线程数 ≤ 系统最大文件描述符限制 -
务必禁用未启用的MPM模块:如启用了
mpm_event,就注释掉mpm_prefork和mpm_worker的LoadModule行,避免冲突和隐式资源占用
Keep-Alive要开,但不能“赖着不走”
现代网页平均加载30+资源,关闭Keep-Alive会让TCP握手开销占到总延迟的30%以上;但放任空闲连接又会耗尽连接池:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
KeepAlive On必须开启 -
KeepAliveTimeout 7:7秒是实测平衡点——短于5秒起不到复用效果,长于15秒易堆积空闲连接 -
MaxKeepAliveRequests 150:足够支撑单次页面完整加载,又避免单连接长期霸占线程
缓存分层:浏览器端 + 服务器端双生效
缓存是性价比最高的提速手段,关键在分层命中、精准过期:
-
浏览器缓存靠 mod_expires:图片/字体设
"access plus 1 year",CSS/JS设"access plus 1 month",HTML设"access plus 10 minutes"(配合版本号或ETag控制更新) -
服务器端缓存靠 mod_cache_disk:只缓存200响应、且含
Cache-Control: public, max-age=300头的内容;CacheRoot /var/cache/apache2建议挂载到SSD分区,CacheMaxExpire 300防陈旧内容堆积
压缩与日志:减传输、少写盘
这两项优化不提升吞吐上限,但能显著压低P95/P99延迟:
-
Gzip压缩限定范围:启用
mod_deflate,仅压缩text/html、text/css、application/javascript等文本类型;排除image/*、application/pdf等已压缩格式;压缩级别设为6(兼顾CPU与体积) -
日志精简+异步落盘:
LogLevel warn调至error;访问日志改用CustomLog "|rotatelogs ... 86400" combined管道方式,避免阻塞主线程;错误日志保留warn以上即可
不复杂但容易忽略:每次调参后用ab -n 1000 -c 200 http://yoursite/或wrk -t4 -c200 -d30s http://yoursite/验证,关注Time per request (mean)和Failed requests变化。真实业务响应提升,最终落在用户打开页面的那几百毫秒里。










