温馨提示×

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),减少用户态/内核态拷贝,提高静态文件吞吐。
  • 前端加速:将图片、视频、归档等交给 CDNNginx/ 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
    • 静态交付
      • EnableSendfile On
  • 实施步骤
    1. 备份配置;2) 选择并启用合适 MPM;3) 按“内存与并发估算”设定并发参数;4) 依次开启压缩/缓存/发送文件;5) 调整 KeepAlive/Timeout;6) 提升文件描述符与必要的系统限制;7) 重启并灰度;8) 用监控与压测验证,循环迭代。

0