apache在centos上如何处理高并发
在 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
- 启用 Gzip(mod_deflate):
-
传输与超时:
- 合理设置 Timeout(默认 60 秒),避免过长等待占用工作进程。
四、系统与架构层面的增强
-
提升文件描述符限制:
- /etc/security/limits.conf:
- soft nofile 65536
- hard nofile 65536
- 确保 systemd 服务也放宽限制(在相应的 service 单元或 /etc/systemd/system.conf 中设置 LimitNOFILE=65536),然后重启服务。
- /etc/security/limits.conf:
-
内核网络栈优化(/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_log 与 access_log,必要时调整日志级别或采用异步/缓冲日志方案。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: apache在centos上如何处理高并发
本文地址: https://pptw.com/jishu/772253.html
