首页主机资讯apache在centos上如何处理高并发

apache在centos上如何处理高并发

时间2025-12-16 00:20:04发布访客分类主机资讯浏览804
导读:在 CentOS 上提升 Apache 并发能力的核心思路 选择并切换到适合高并发的 MPM(多处理模块),优先使用 event(若使用 PHP-FPM 等非线程安全模块,则选 prefork)。 调整 MPM 关键参数(如 MaxReq...

在 CentOS 上提升 Apache 并发能力的核心思路

  • 选择并切换到适合高并发的 MPM(多处理模块),优先使用 event(若使用 PHP-FPM 等非线程安全模块,则选 prefork)。
  • 调整 MPM 关键参数(如 MaxRequestWorkers/ServerLimit/ThreadsPerChild 等)以匹配内存与 CPU。
  • 开启并优化 持久连接 KeepAlive,减少握手开销。
  • 启用 压缩(mod_deflate)缓存(mod_expires/mod_cache),降低传输与后端压力。
  • 提升 系统资源限制(文件描述符、内核网络栈),并配合 监控与压测 持续验证。

一、选择并切换 MPM

  • 查看当前 MPM:
    httpd -V | grep -i mpm
  • CentOS 7 上常见默认是 prefork;高并发建议切换到 event(需模块支持)。编辑 /etc/httpd/conf.modules.d/00-mpm.conf,仅保留需要的模块行,例如启用 event:
    LoadModule mpm_event_module modules/mod_mpm_event.so
    注释掉:mpm_prefork 与 mpm_worker。
  • 三种常见 MPM 的取舍:
    • prefork:多进程、无线程,兼容性好(适合使用线程不安全模块如某些 PHP SAPI),但内存占用高。
    • worker:多进程+多线程,资源占用更省,适合并发较高场景。
    • event:基于 worker 的事件驱动,进一步优化长连接与空闲连接的资源占用,适合高并发 HTTP/HTTPS。

二、MPM 关键参数调优

  • 通用原则:

    • 估算公式(event/worker):最大并发请求数 ≈ ServerLimit × ThreadsPerChild(需满足 MaxRequestWorkers 的限制)。
    • 结合内存:单个进程/线程常驻内存 × 并发数 ≤ 可用内存,避免 OOM。
    • 逐步调参并用压测验证,避免一次性拉满。
  • event 示例(/etc/httpd/conf/httpd.conf 或 included mpm 配置段):
    StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 1000 ServerLimit 16 说明:上述示例为 16 × 25 = 400 的最大并发请求能力,可按内存与压测结果上调。

  • prefork 示例(使用 prefork 时):
    StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 500 MaxConnectionsPerChild 10000 说明:prefork 下并发能力主要由 MaxRequestWorkers 决定;如要突破旧版默认 256 的限制,需同时设置 ServerLimit ≥ MaxRequestWorkers,且调整顺序通常是先 ServerLimit 再 MaxRequestWorkers。

三、连接与内容交付优化

  • 持久连接 KeepAlive:
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 5
    说明:开启长连接可显著减少 TCP 握手/挥手;Timeout 过小会频繁建连,过大则占用连接资源,通常 5 秒是较均衡的起点。

  • 压缩与缓存:

    • 启用 Gzip(mod_deflate):
      AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
    • 设置浏览器缓存(mod_expires):
      ExpiresActive On ExpiresByType text/css “access plus 30 days” ExpiresByType image/jpeg “access plus 1 year” ExpiresByType image/png “access plus 1 year” ExpiresByType image/gif “access plus 1 year” ExpiresByType application/javascript “access plus 30 days”
    • 静态资源缓存(可选,mod_cache/mod_cache_disk):
      CacheRoot “/var/cache/httpd” CacheEnable disk / CacheDirLevels 2 CacheDirLength 1
  • 传输与超时:

    • 合理设置 Timeout(默认 60 秒),避免过长等待占用工作进程。

四、系统与架构层面的增强

  • 提升文件描述符限制:

    • /etc/security/limits.conf:
      • soft nofile 65536
      • hard nofile 65536
    • 确保 systemd 服务也放宽限制(在相应的 service 单元或 /etc/systemd/system.conf 中设置 LimitNOFILE=65536),然后重启服务。
  • 内核网络栈优化(/etc/sysctl.conf,执行 sysctl -p 生效):
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.ip_local_port_range = 10000 65000
    net.ipv4.tcp_max_syn_backlog = 8192
    net.core.somaxconn = 65535
    net.core.netdev_max_backlog = 30000
    说明:上述参数有助于缓解 SYN 洪泛TIME_WAIT 占用与连接队列瓶颈。

  • 架构扩展:

    • 启用 HTTP/2(mod_http2) 提升多路复用与加载性能。
    • 使用 Nginx/HAProxy 作为反向代理或负载均衡,将静态资源交由 Nginx/CDN,Apache 专注动态内容或作为应用后端。

五、验证与运维

  • 配置生效与平滑重启:
    systemctl restart httpd(或 graceful 以平滑生效)。

  • 监控与状态:

    • 实时状态:启用 mod_status 并访问 server-status 页面查看总访问量、工作进程/线程、每个连接的排队与处理情况。
    • 连接与端口:ss -lntp | grep :80;观察 ESTABLISHED/TIME_WAIT 数量变化。
    • 资源监控:top/htop、vmstat、iostat 观察 CPU、内存、I/O。
  • 压测与回归:

    • 使用 ab(Apache Bench)或 wrk 进行压力测试,逐步增加并发,观察 吞吐、延迟、错误率 与系统资源占用,回滚不利变更。
    • 持续关注 /var/log/httpd/error_logaccess_log,必要时调整日志级别或采用异步/缓冲日志方案。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: apache在centos上如何处理高并发
本文地址: https://pptw.com/jishu/772253.html
apache在centos上如何自定义模块 centos apache如何部署

游客 回复需填写必要信息