Apache配置中如何优化服务器性能
小樊
43
2025-12-17 00:16:41
Apache性能优化实操指南
一 核心原则与基线
- 明确瓶颈:是CPU密集(动态脚本、模板渲染)还是I/O密集(静态资源、慢查询)。用系统监控(如 top、vmstat、iostat)与 Apache 状态页(mod_status)定位。
- 选择合适的 MPM:高并发优先 event(或 worker);若使用 mod_php 等阻塞式模块,通常选 prefork 更稳。用命令查看:httpd -V | grep -i mpm。
- 基线先行:记录优化前的并发能力、P95/P99 延迟、错误率与资源使用,便于回滚与对比。
二 MPM并发与内存的精确调优
- 并发上限估算(prefork):最大并发进程数 ≈ 可用内存 / 单进程常驻内存。示例:可用内存 1 GB、单进程约 15 MB,则 MaxRequestWorkers ≈ 1000/15 ≈ 65,可先设 50–70 并压测微调。
- KeepAlive 与并发关系:HttpdProcessNumber ≈ KeepAliveTimeout × RPS / AvgKeepAliveRequests;HttpdUsedMemory ≈ HttpdProcessNumber × MemoryPerHttpdProcess。页面包含大量静态资源时开长连接更省握手;纯动态、内存紧张时可考虑关闭或缩短超时。
- 推荐起点(按 MPM):
- event(高并发通用)
- StartServers 4
- MinSpareThreads 25
- MaxSpareThreads 75
- ThreadsPerChild 25
- MaxRequestWorkers 150
- MaxConnectionsPerChild 1000
- prefork(配合 mod_php 常用)
- StartServers 5
- MinSpareServers 5
- MaxSpareServers 10
- MaxRequestWorkers 150
- MaxConnectionsPerChild 1000
- 若 MaxRequestWorkers 需要超过 256(旧版本常见上限),在 prefork 下需同时设置 ServerLimit,且 ServerLimit ≥ MaxRequestWorkers,ServerLimit 必须写在 MaxRequestWorkers 之前。
三 传输与缓存优化
- 启用压缩:启用 mod_deflate,压缩文本、脚本、样式等可显著降低带宽与时延。
- 设置过期与缓存:启用 mod_expires,为静态资源设置长期 Cache-Control/Expires,减少重复请求与回源。
- 页面与反向代理缓存:启用 mod_cache/mod_cache_disk,对可缓存内容进行磁盘缓存,减轻后端压力。
- 静态资源交付:启用 sendfile(EnableSendfile On),减少用户态/内核态拷贝,提高静态文件吞吐。
- 前端加速:将图片、视频、归档等交给 CDN 或 Nginx/ Varnish,Apache 更聚焦动态请求与业务逻辑。
四 操作系统与连接级优化
- 文件描述符:提升进程可打开文件数(如 ulimit -n 65535),并相应放宽 Apache 的 LimitNOFILE,避免“Too many open files”。
- 主机名解析:关闭 HostnameLookups Off,避免每条日志触发 DNS 查询。
- 请求超时:合理设置 Timeout(如 300 秒),防止慢客户端长时间占用连接。
- 连接复用与端口:长连接减少握手开销,但 KeepAliveTimeout 过大将占用更多工作进程/线程;结合并发公式与压测选择 2–5 秒 的 KeepAliveTimeout 更通用。
- 监控与压测:启用 mod_status 观察 Busy/Idle 工作进程;用 ab、wrk、jmeter 做渐进式压测,观察吞吐、错误率与资源曲线再迭代参数。
五 快速配置片段与实施步骤
- 示例片段(可按需合并到 httpd.conf 或对应 MPM 配置段)
- KeepAlive 与超时
- KeepAlive On
- MaxKeepAliveRequests 100
- KeepAliveTimeout 2–5
- Timeout 300
- HostnameLookups Off
- 压缩与缓存
- mod_deflate:AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
- mod_expires:ExpiresActive On;ExpiresByType image/jpg “access plus 1 year”;ExpiresByType text/css “access plus 1 month”
- mod_cache_disk:CacheRoot “/var/cache/apache2/mod_cache_disk”;CacheEnable disk /;CacheDirLevels 2;CacheDirLength 1
- 静态交付
- 实施步骤
- 备份配置;2) 选择并启用合适 MPM;3) 按“内存与并发估算”设定并发参数;4) 依次开启压缩/缓存/发送文件;5) 调整 KeepAlive/Timeout;6) 提升文件描述符与必要的系统限制;7) 重启并灰度;8) 用监控与压测验证,循环迭代。