怎么解决 Apache 在高频并发请求下的 CPU 竞争

冰川箭仙

冰川箭仙

2026-07-07

984人浏览

原创

应优先启用 event mpm 模式,它通过事件驱动分离监听与工作线程,减少上下文切换和阻塞等待;再依内存与 cpu 精算 maxrequestworkers 和 threadsperchild,收紧 keepalivetimeout 至 2 秒,并剥离阻塞型任务。

怎么解决 apache 在高频并发请求下的 cpu 竞争

Apache 在高频并发请求下出现 CPU 竞争,本质是请求处理模型与系统资源分配不匹配导致的——进程/线程频繁创建销毁、锁竞争加剧、上下文切换开销大。解决重点不在“压低 CPU 使用率”,而在于**减少无效调度、规避阻塞等待、让单位 CPU 更高效地服务更多连接**。

换用 event MPM 并合理调参

prefork(一请求一进程)和 worker(多线程)在高并发时易因进程/线程数量膨胀引发严重 CPU 竞争。event MPM 是当前最适配高频并发的模型:它用少量线程 + 事件驱动机制管理大量连接,尤其擅长处理 KeepAlive 空闲连接和慢速客户端。

  • 确认已启用:apache2ctl -V | grep MPM 输出应含 event
  • 关键参数示例(4核8G 云服务器):
    StartServers 3<br>
    MinSpareThreads 32<br>
    MaxSpareThreads 96<br>
    ThreadsPerChild 32<br>
    MaxRequestWorkers 512<br>
    MaxConnectionsPerChild 10000

    注意:MaxRequestWorkers 不可超过 ThreadsPerChild × 进程数,且需预留内存(每个线程约 2–4MB)
  • 禁用 prefork 和 worker 模块:a2dismod mpm_prefork mpm_worker,再 a2enmod mpm_event

收紧 KeepAlive 与超时设置

过长的 KeepAliveTimeout 会让大量线程卡在“等下一个请求”的空闲状态,既不释放资源,又持续参与调度竞争。

Apache 2.4.62
Apache 2.4.62

PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。

下载
  • 关闭无意义的长连接:KeepAlive On 保留,但大幅缩短超时:KeepAliveTimeout 2
  • 限制单连接请求数:MaxKeepAliveRequests 100(避免一个连接长期霸占线程)
  • 对 API 或动态接口,可在特定 Location 中关闭:
    <location><br>
      KeepAlive Off<br></location>

剥离阻塞型任务,交由异步或外部服务

CPU 竞争常源于 Apache 子进程被阻塞(如 PHP 同步调用数据库、文件读写、远程 HTTP 请求),导致线程无法及时响应新请求。

  • 静态资源全交给 Nginx 反向代理处理,Apache 专注动态逻辑
  • 耗时操作改用消息队列(如 RabbitMQ、Redis Pub/Sub)异步执行,Apache 立即返回响应
  • 数据库查询加索引、启用查询缓存;PHP 应用启用 OPcache,避免重复编译
  • 禁用非必要模块(如 mod_infomod_status 生产环境慎开),减少模块间锁竞争

系统级协同优化

Apache 的 CPU 表现受内核调度和资源限制直接影响:

  • 提高文件描述符上限:
    echo '* soft nofile 65535' >> /etc/security/limits.conf<br>
    echo '* hard nofile 65535' >> /etc/security/limits.conf

    并在 Apache 启动脚本中加入 ulimit -n 65535
  • 调优 TCP 栈:
    net.core.somaxconn = 65535<br>
    net.ipv4.tcp_max_syn_backlog = 65535<br>
    net.ipv4.tcp_tw_reuse = 1

    写入 /etc/sysctl.conf 后执行 sysctl -p
  • 绑定 CPU(可选):对多核服务器,可用 taskset -c 0,1,2,3 systemctl restart apache2 固定 Apache 工作线程到指定核心,减少跨核缓存失效

不复杂但容易忽略:CPU 竞争往往是表象,背后常是 I/O 阻塞、低效代码或配置错配。先切到 event MPM,收紧超时,再剥离阻塞任务,三步做完,多数高频场景的 CPU 峰值能下降 40% 以上。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

355

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

618

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

1216

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

429

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

324

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

190

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1034

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

1850

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

323

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程