Apache内存CPU开销优化关键在于匹配负载、选对MPM(event优先)、精调StartServers/ThreadsPerChild/MaxRequestWorkers参数,禁用非必要模块,缩短KeepAliveTimeout至2–5秒,并同步调高ulimit与内核连接限制。

Apache 的内存和 CPU 开销不是靠“一刀切”调参数就能降下来的,关键在于匹配实际负载、选对 MPM 模型、控制进程/线程生命周期,并减少无效资源占用。优化目标不是让 Apache 尽量“轻”,而是让它在稳定响应的前提下,不浪费内存、不空转 CPU。
确认并选用合适的 MPM 类型
MPM 决定 Apache 底层资源调度逻辑,直接影响内存与 CPU 占用形态:
-
prefork:每个请求独占一个进程,CPU 切换少但内存开销大(每个进程约 10–30 MB),适合 PHP-CGI 等非线程安全环境;不适合高并发。 -
worker/event:多进程 + 多线程,共享内存、复用连接,内存占用低(单线程通常 < 2 MB),CPU 利用率更均衡;现代 Linux 默认启用event,推荐优先使用。
运行httpd -V | grep -i mpm或apache2ctl -V | grep -i mpm查看当前模块。若为prefork且无兼容性限制(如旧版 PHP 扩展),建议切换到event。
精调 MPM 参数,避免资源冗余
以 event 为例,重点控制三项核心关系:
-
StartServers:设为 CPU 核心数(如 4 核 →StartServers 4),避免冷启动时拉起过多空闲进程。 -
ThreadsPerChild:建议 25–75,值过高会增加线程调度压力,过低则需更多子进程;结合MaxRequestWorkers反推合理范围。 -
MaxRequestWorkers:最大并发处理能力,应 ≤ServerLimit × ThreadsPerChild;按可用内存反推——例如每线程平均占用 3 MB,16 GB 可用内存最多支撑约 5000 线程,但需预留系统和其他服务空间,设为 2000–3000 更稳妥。
同时调低MinSpareThreads和MaxSpareThreads(如25和75),防止空闲线程长期驻留吃内存。
关闭非必要模块与功能
Apache 加载的每个模块都消耗内存和初始化开销:
- 运行
httpd -M(或apache2ctl -M)列出已启用模块,禁用不用的:如mod_status(除非需要监控)、mod_info、mod_autoindex、mod_userdir。 - 注释掉
LoadModule行,或在 Debian/Ubuntu 中用a2dismod module_name,RHEL/CentOS 用httpd -M配合配置文件注释。 - 关闭
ServerSignature和ServerTokens Full,减少响应头开销与潜在信息泄露。
缩短连接生命周期,释放资源更快
长时间空闲连接会持续占用线程和内存:
- 启用
KeepAlive On(默认通常已开),但严格限制KeepAliveTimeout 2–5(秒),避免线程被长连接挂住。 - 设置
MaxKeepAliveRequests 50–100,防止单连接反复复用导致资源滞留。 - 对静态资源(CSS/JS/图片)启用
Expires或Cache-Control,减少重复请求,间接降低 Apache 处理压力。
限制单 IP 并发与异常行为
突发流量或扫描行为常表现为大量短连接或慢速攻击,推高 CPU 和 fd 占用:
- 使用
mod_ratelimit或mod_evasive限制单 IP 请求频率(如每秒不超过 30 次)。 - 用
mod_limitipconn限制单 IP 最大并发连接数(如MaxConnPerIP 5),防 FlashGet 类工具打满连接池。 - 结合
iptables或fail2ban封禁高频异常 IP,避免 Apache 层面反复处理恶意请求。
调整系统级资源上限
Apache 再优化也受限于内核和用户级限制:
- 检查
ulimit -n,确保 ≥MaxRequestWorkers × 2(每个连接至少 2 个 fd);通过 systemd 服务文件设置LimitNOFILE=65536。 - 调整内核
net.core.somaxconn(如sysctl -w net.core.somaxconn=65535)和net.ipv4.ip_local_port_range,避免端口耗尽或连接队列溢出。 - 禁用
DNS lookups:在httpd.conf中设HostnameLookups Off,避免每次请求做反向解析拖慢响应、升高 CPU。
不复杂但容易忽略。


















