温馨提示×

如何优化Apache2的响应速度

小樊
34
2026-01-01 15:49:13
栏目: 编程语言

Apache2 响应速度优化实操指南

一 基础与系统层面

  • 优先保障内存充足,避免swap;用 top/ps 统计单个 Apache 进程常驻内存,据此设置并发上限(如 MaxRequestWorkers/MaxClients),确保服务器在高并发下也不发生换页。
  • 打开操作系统与内核的最新稳定补丁;在支持的系统上启用 sendfile(2) 以加速静态文件传输(Linux 2.4+ 支持),并在可用时开启 mmap 提升文件读取效率。
  • 如遇到多核/特定平台下 mmap 或 sendfile 表现不佳,可在相应目录关闭:EnableMMAP Off / EnableSendfile Off。
  • 网络与文件描述符:适度提升 fs.file-maxnet.core.somaxconn,并优化 TCP 队列与回收参数(如 tcp_tw_reuse、tcp_fin_timeout),以支撑更高并发连接与更短排队时延。

二 MPM 选择与关键参数

  • 选择并发模型:静态资源为主建议 event(高并发、低线程开销);若使用 mod_php 等阻塞式模块,优先 prefork 以确保稳定性;混合型负载可用 worker。Debian/Ubuntu 可通过 a2enmod mpm_event 切换。
  • 并发与内存的“黄金法则”:估算每个进程/线程的内存占用,设置 MaxRequestWorkers/MaxClients 使峰值内存 < 物理内存(留出系统与其他服务余量),避免 swap。
  • 常用参数建议(需压测微调):
    • KeepAlive On,MaxKeepAliveRequests 100,KeepAliveTimeout 5(减少握手/挥手开销,兼顾长连接复用与资源占用)。
    • Timeout 5–15(视业务与客户端网络而定,避免过长占用连接)。
    • prefork 示例(保守起步,按内存与压测上调):StartServers 5–10,MinSpareServers 5–10,MaxSpareServers 10–20,MaxRequestWorkers 150–400,MaxRequestsPerChild 1000–10000
    • event 示例(以 2GB 内存、单进程约 50MB 估算,目标并发 ~150):StartServers 2,MinSpareThreads 25,MaxSpareThreads 75,ThreadsPerChild 25,ThreadLimit 64,MaxRequestWorkers 150,MaxConnectionsPerChild 0

三 静态资源加速与内容优化

  • 启用压缩:使用 mod_deflate 压缩文本类资源(text/html、text/css、application/javascript 等),减少传输体积、缩短首包时间。
  • 浏览器缓存:启用 mod_expires 设置 Cache-Control/Expires,典型策略:
    • text/css、application/javascript:1 week;image/jpeg、image/png、image/gif:1 month;text/html:1 hour(可按业务调整)。
  • 服务器端缓存:启用 mod_cache/mod_cache_disk 做反向代理/网关层缓存,缓存命中可显著降低后端压力与响应时延。
  • 传输层优化:启用 HTTP/2(mod_http2)提升多路复用与头部压缩效率;启用 SSL/TLS 时开启 OCSP StaplingSession Cache,减少握手往返与证书校验延迟。

四 减少开销的安全与目录配置

  • 关闭或缩小 DNS 反查:HostnameLookups Off;若日志需要域名,使用 logresolve 离线处理,避免影响在线性能。
  • 禁止使用 .htaccess:在 中设置 AllowOverride None,避免逐层文件检查带来的系统调用与 I/O 开销。
  • 符号链接策略:优先 Options FollowSymLinks;如必须校验,尽量将 SymLinksIfOwnerMatch 限制在最小目录范围,减少额外 lstat 调用。
  • 目录索引与内容协商:关闭目录浏览(Options -Indexes);用明确的 DirectoryIndex 列表替代通配;能用 type-map 就不用 MultiViews。

五 上线与验证流程

  • 变更流程:每次只调整少量参数,先在测试环境验证;变更后用 ab/jmeter 做吞吐与时延压测,配合 top/vmstat/sar 观察 CPU、内存、I/O、连接数;确认无回归再灰度上线。
  • 监控与回滚:上线后持续观察 响应时间 P95/P99、错误率、连接数、带宽;准备快速回滚方案。
  • 维护与扩展:定期更新 Apache 与模块;静态资源建议接入 CDN 进一步降低源站压力与用户时延。

0