温馨提示×

Debian Apache性能调优技巧

小樊
32
2025-11-16 05:42:01
栏目: 智能运维

Debian 上 Apache 性能调优实用指南

基础准备与模块启用

  • 保持系统与软件为最新:执行 sudo apt update && sudo apt upgrade,获取性能修复与安全改进。
  • 启用关键模块:优先启用 mod_deflate、mod_expires、mod_cache、mod_cache_disk、mod_ssl、mod_http2、mod_status,分别用于压缩、浏览器缓存、磁盘缓存、HTTPS 与 HTTP/2、运行状态监控。
  • 切换并验证 MPM:高并发场景建议使用 mpm_event(或 mpm_worker);通过 apachectl -V | grep MPM 查看当前 MPM,使用 a2enmod mpm_event && a2dismod mpm_prefork 切换后重启。
  • 可选:部署 Varnish/Memcached 做反向代理与动态缓存,进一步降低后端压力。

核心配置优化

  • 启用压缩(mod_deflate):减少传输体积,示例仅压缩文本与脚本类资源。
  • 设置浏览器缓存(mod_expires):为不同类型资源设置差异化缓存时间,命中率更高。
  • 开启长连接(KeepAlive):复用 TCP 连接,降低握手开销。
  • 调整 MPM(以 mpm_event 为例):结合内存与并发目标设置进程/线程与连接上限。
  • 启用 HTTP/2:在启用 mod_ssl 的基础上开启 HTTP/2,多路复用提升并发与首包速度。
  • 启用 SSL/TLS 优化:使用 OCSP Stapling 与会话缓存,减少握手往返与证书验证延迟。
  • 示例片段(按需合并到相应配置段或对应模块配置文件):
    • 压缩
      <IfModule mod_deflate.c>
          AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
      </IfModule>
      
    • 浏览器缓存
      <IfModule mod_expires.c>
          ExpiresActive On
          ExpiresByType text/html "access plus 1 hour"
          ExpiresByType text/css "access plus 1 week"
          ExpiresByType application/javascript "access plus 1 week"
          ExpiresByType image/jpeg "access plus 1 month"
          ExpiresByType image/png "access plus 1 month"
          ExpiresByType image/gif "access plus 1 month"
      </IfModule>
      
    • KeepAlive
      KeepAlive On
      MaxKeepAliveRequests 100
      KeepAliveTimeout 5
      
    • MPM(mpm_event,示例为中等并发起点,需结合实际压测微调)
      <IfModule mpm_event_module>
          StartServers             2
          MinSpareThreads         25
          MaxSpareThreads         75
          ThreadLimit             64
          ThreadsPerChild         25
          MaxRequestWorkers       150
          MaxConnectionsPerChild   1000
      </IfModule>
      
    • HTTP/2(确保已启用 SSL)
      Protocols h2 http/1.1
      
    • SSL/TLS 优化(含 OCSP Stapling 与会话缓存)
      SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
      SSLUseStapling On
      SSLStaplingCache "shmcb:/var/run/stapling-cache(150000)"
      
      SSLSessionCache "shmcb:/var/run/ssl_scache(512000)"
      SSLSessionCacheTimeout 300
      
    提示:MPM 与缓存路径等参数需结合硬件资源与业务特征压测后确定,上述数值为常用起点。

高并发与扩展

  • 选择合适的并发模型:优先 mpm_event/mpm_worker;若使用 prefork(如部分 PHP 模块场景),需按进程内存上限保守设置 MaxRequestWorkers
  • 反向代理与负载均衡:使用 mod_proxy、mod_proxy_http 将请求分发到多台后端,提高整体吞吐与容错。
  • 边缘缓存:在 Apache 前部署 Varnish 作为反向代理缓存层,静态资源由 Varnish 直接命中,动态内容按策略缓存。
  • 示例(负载均衡片段):
    <VirtualHost *:80>
        ServerName yourdomain.com
        ProxyPass / balancer://mycluster/
        ProxyPassReverse / balancer://mycluster/
    
        <Proxy balancer://mycluster>
            BalancerMember http://backend1.example.com
            BalancerMember http://backend2.example.com
        </Proxy>
    </VirtualHost>
    
    建议:为后端开启健康检查和权重策略,逐步增加后端数量并压测验证瓶颈。

系统与网络层优化

  • 文件描述符限制:提升进程可打开文件数,编辑 /etc/security/limits.conf
    * soft nofile 65535
    * hard nofile 65535
    
  • TCP/IP 参数优化:编辑 /etc/sysctl.conf,提高缓冲区与端口范围,优化连接回收
    net.core.rmem_max 16777216
    net.core.wmem_max 16777216
    net.ipv4.tcp_rmem 4096 87380 16777216
    net.ipv4.tcp_wmem 4096 65536 16777216
    net.ipv4.tcp_congestion_control cubic
    net.ipv4.ip_local_port_range 1024 65000
    net.ipv4.tcp_fin_timeout 30
    
    应用:sudo sysctl -p
  • 监控与观测:启用 mod_status 查看 BusyWorkers/IdleWorkers、请求耗时等关键指标;结合 iftop、nload、netdata 观察带宽与连接状况。

变更流程与验证

  • 配置生效与平滑重载:语法检查 sudo apache2ctl configtest,然后 sudo systemctl reload apache2(重大 MPM/模块切换用 restart)。
  • 验证要点:
    • 压缩生效:响应头出现 Content-Encoding: gzip
    • 缓存生效:响应头出现 Cache-Control/Expires
    • HTTP/2:浏览器开发者工具 Protocol 列为 h2
    • OCSP Stapling:响应头出现 OCSP Stapling: hit
    • 并发能力:通过 ab/wrk/siege 或真实流量压测,观察 吞吐、P95/P99 延迟、Worker 占用 并迭代参数。
  • 风险提示:修改 MPM/内存相关 参数前务必备份配置并先在测试环境验证,避免一次性大幅变更导致服务不稳定。

0