温馨提示×

Ubuntu Apache怎样提高并发处理能力

小樊
34
2025-11-25 07:14:47
栏目: 智能运维

Ubuntu 上提升 Apache 并发处理能力的实用方案

一 选择合适 MPM 并调整关键参数

  • 选择并发更高的 MPM Event(或 Worker);若使用线程不安全的模块(如部分 PHP SAPI),则保留 Prefork。切换示例:sudo a2dismod mpm_prefork && sudo a2enmod mpm_event && sudo systemctl restart apache2。
  • 典型并发能力估算:MaxRequestWorkers ≈ 内存 / 单进程/线程 RSS。例如单进程约 30MB,内存 4GB 时,理论值约 130(留有余量建议 ≤ 120)。
  • 参考配置(按需微调):
    • Prefork(适合非线程安全 PHP):
      StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 120 MaxConnectionsPerChild 10000
    • Event/Worker(更高并发):
      StartServers 4 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestWorkers 150 MaxConnectionsPerChild 1000
      调整完成后重启:sudo systemctl restart apache2。

二 优化 KeepAlive 与超时减少连接开销

  • 启用持久连接并控制每连接请求数与等待时间:
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 2(高并发建议 1–5 秒
  • 降低整体超时,避免慢客户端占用:Timeout 30(静态资源可更低,动态接口视业务而定)。
  • 关闭 DNS 反向解析以减少阻塞:HostnameLookups Off。
  • 修改后重启服务生效。

三 启用压缩与缓存降低负载与时延

  • 启用压缩(mod_deflate):
    AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript
  • 启用缓存与过期策略(mod_cache、mod_cache_disk、mod_expires):
    sudo a2enmod cache cache_disk expires
    ExpiresActive On ExpiresByType text/css “access plus 1 month” ExpiresByType application/javascript “access plus 1 month” ExpiresByType image/jpg “access plus 1 month”
    CacheRoot /var/cache/apache2/mod_cache_disk CacheEnable disk / CacheDirLevels 2 CacheDirLength 1
  • 适度降低日志开销:LogLevel warn

四 连接与请求限制及安全加固

  • 限制请求头与请求行大小,抵御异常或放大请求:
    LimitRequestLine 192
    LimitRequestFieldSize 8190
    LimitHeadersCount 100
  • 隐藏版本信息,降低攻击面:ServerTokens Prod

五 监控、压测与横向扩展

  • 实时监控与状态页:
    • 资源监控:htop、netstat、dstat、sar。
    • Apache 状态页:启用 mod_status,配置
      <Location “/server-status”> SetHandler server-status Require local
      访问 http://服务器IP/server-status 查看并发与排队情况。
  • 压测与迭代:使用 ab、wrk、k6 进行基线压测,观察吞吐、P95/P99 延迟与错误率,按监控结果微调 MPM 与超时。
  • 横向扩展:在 Apache 前部署 Nginx/HAProxy 做负载均衡,分摊到多台后端实例,提高总体并发上限与可用性。

0