温馨提示×

怎样设置Apache以提高服务器性能

小樊
31
2025-12-12 20:12:14
栏目: 云计算

Apache性能优化实操指南

一 硬件与操作系统基础

  • 优先保障充足的内存(RAM),避免服务器发生swap,因为一旦开始换页,请求延迟会显著上升并引发雪崩。通过控制并发进程/线程数(如MaxRequestWorkers/MaxClients)来防止内存被耗尽。CPU、网卡、磁盘的“够用”程度需结合实际压测确定。保持操作系统与TCP栈、线程库的最新稳定版,可获得显著的性能改进。若平台支持,启用sendfile(2) 以加速静态文件传输并降低CPU占用;在NFS等特殊场景可关闭此特性以提升稳定性。

二 运行时关键配置

  • 连接与解析
    • 关闭或限制DNS反查:HostnameLookups Off;如确需名称解析,使用logresolve在离线/专用机器处理日志,避免影响线上性能。使用基于IP的访问控制替代基于域名的规则,减少双重反向解析开销。
  • 目录与符号链接
    • 性能优先时,目录上设置Options FollowSymLinks;如必须校验,尽量将校验范围限制在子目录而非整个DocumentRoot路径,减少额外的lstat(2) 调用。
  • 覆盖与协商
    • 全站使用AllowOverride None,避免为每个请求逐级查找**.htaccess**;内容协商尽量用显式的DirectoryIndex列表或type-map文件替代MultiViews,减少目录扫描与协商成本。
  • 内存映射与内核发送
    • 在部分平台或NFS挂载下,禁用EnableMMAPEnableSendfile可提升稳定性;若非上述场景,保持开启通常更优。

三 并发模型与进程线程参数

  • 选择高效的MPM(多处理模块)
    • 动态内容或非线程安全模块较多时,使用prefork;追求高并发与资源效率时,优先event(Apache 2.4+),或worker。在高并发下,event/worker通常较prefork具备更好的并发与内存表现。
  • 并发上限的计算与设置
    • 核心思路:确保“平均每个Apache进程的内存占用 × 最大并发数(MaxRequestWorkers/MaxClients)”不超过可用内存,并预留系统与其他服务内存。估算步骤:
      1. 用工具(如top/ps)统计单进程常驻内存(RSS);
      2. 设定目标并发 N,使得 N × 单进程内存 ≤ 可用内存;
      3. 结合压测微调,避免进入swap。
    • 示例(仅示意,需以你的实测为准):
      • prefork(适合线程不安全场景)
        <IfModule mpm_prefork_module>
            StartServers          5
            MinSpareServers       5
            MaxSpareServers      10
            MaxRequestWorkers    150   # 依据内存与压测调整
            MaxConnectionsPerChild 1000 # 防内存泄漏/长期累积开销
        </IfModule>
        
      • event/worker(高并发优先)
        <IfModule mpm_event_module>
            StartServers          2
            MinSpareThreads      25
            MaxSpareThreads      75
            ThreadsPerChild      25
            MaxRequestWorkers    150   # 并发上限,受内存与CPU约束
            MaxConnectionsPerChild 1000
        </IfModule>
        
    • 调整策略:先设定保守值,逐步压测(如ab/siege),观察CPU、内存、请求耗时、排队等指标,再小步上调并发参数与KeepAlive相关值。

四 KeepAlive与内容传输优化

  • KeepAlive建议
    • 开启KeepAlive On以减少TCP握手/挥手与SSL开销;将MaxKeepAliveRequests设为较大值(如100或更高),将KeepAliveTimeout设为5–20秒的折中区间:太短难以发挥复用优势,太长会占用过多工作进程/线程。繁忙站点可适度降低Timeout,释放空闲连接占用的资源。
  • 压缩与缓存
    • 启用mod_deflate压缩文本、CSS、JS等可显著降低传输体积;启用mod_expires设置Cache-Control/Expires头,让浏览器与中间缓存长期复用静态资源;需要时启用mod_cache/mod_cache_disk做反向代理/本地磁盘缓存,进一步减轻后端压力。

五 监控、压测与逐步调优

  • 观测与诊断
    • 打开mod_status(ExtendedStatus On)查看当前连接、工作进程/线程、排队等;结合apachetop/htop观察资源使用;使用ab/siege进行渐进式压测,验证配置变更的效果与瓶颈点。
  • 系统与安全加固
    • 适度提升文件描述符限制(如ulimit -n),确保能支撑目标并发;精简不必要的Apache模块;为PHP开启OPcache减少编译开销;按需配置日志轮转(rotatelogs/logrotate),避免I/O成为瓶颈。
  • 变更流程
    • 任何配置调整前先备份;每次只变更少量参数并灰度/回滚;以“稳定优先、逐步提升”为原则,持续监控与压测,找到适合你业务与硬件的最优参数集。

0