博客
关于我
MPM模块
阅读量:793 次
发布时间:2023-02-09

本文共 2015 字,大约阅读时间需要 6 分钟。

Apache MPM 模块化处理模块:Prefork、Worker 和 Event 模式比较及配置

Apache 2.X 引入了多路处理模块(Multipprocessing Module,MPM),通过将核心任务处理作为可插拔的模块来优化性能。MPM 的核心目标是针对不同环境进行优化,最大化服务器性能。以下是三种主要 MPM 模式的工作原理及配置方法。


Prefork MPM

Prefork MPM 采用预派生子进程的方式,每个子进程独立处理请求。其工作原理类似于 Apache 1.3,主要适用于缺乏线程安全库的系统或需要避免线程兼容性问题的环境。Prefork 的优点是稳定性高,因为每个进程之间是完全隔离的。

Prefork MPM 的配置

StartServers 5 # 推荐设置:小=默认,中=20~50,大=50~100 MinSpareServers 5 # 推荐设置:与 StartServers 保持一致 MaxSpareServers 10 # 推荐设置:小=20,中=30~80,大=80~120 MaxClients 150 # 推荐设置:小=500,中=500~1500,大型=1500~3000 MaxRequestsPerChild 0 # 推荐设置:小=10000,中或大=10000~500000 # 注意:需额外设置 ServerLimit 参数,与 MaxClients 保持一致

Worker MPM

Worker MPM 采用多线程多进程的混合模式,每个子进程包含固定数量的线程。这种模式适合处理高并发请求,内存使用较低。Worker MPM 的缺点是如果某个线程崩溃,整个进程会随之停止,因此需要确保线程安全。

Worker MPM 的配置

StartServers 2 # 推荐设置:小=默认,中=3~5,大=5~10 MaxClients 150 # 推荐设置:小=500,中=500~1500,大型=1500~3000 MinSpareThreads 25 # 推荐设置:小=默认,中=50~100,大=100~200 MaxSpareThreads 75 # 推荐设置:小=默认,中=80~160,大=200~400 ThreadsPerChild 25 # 推荐设置:小=默认,中=50~100,大型=100~200 MaxRequestsPerChild 0 # 推荐设置:小=10000,中或大=10000~50000 # 注意:如果 MaxClients/ThreadsPerChild 超过 16,需额外设置 ServerLimit 参数

Event MPM

Event MPM 是针对高负载服务器设计的,通过将服务进程从连接中分离,减少线程占用。这种模式在处理高点击率的应用中表现优异,但请注意:Event MPM 不支持 HTTPS。

Event MPM 的配置

StartServers 3 # 推荐设置:小=默认,中=3~5,大=5~10 MinSpareThreads 75 # 推荐设置:小=默认,中=50~100,大=100~200 MaxSpareThreads 250 # 推荐设置:小=默认,中=80~160,大=200~400 ThreadsPerChild 25 # 推荐设置:小=默认,中=50~100,大型=100~200 MaxRequestWorkers 400 # 推荐设置:小=默认,中=500~1500,大型=1500~3000 MaxConnectionsPerChild 0 # 推荐设置:小=10000,中或大=10000~500000

MPM 模式对比

对比项 Prefork Worker Event
进程特点 预派生子进程,无线程 混合多线程多进程 事件驱动,线程占用低
优点 稳定性高,适合线程安全模块 内存使用低,适合高并发 点击率高,性能优异
缺点 内存占用高,线程安全性依赖进程 线程崩溃会导致进程停止 不支持 HTTPS,试验性状态
适用场景 无线程安全库的系统 高流量 HTTP 服务器 高负载、高点击率应用

MPM 模式配置注意事项

  • Prefork:建议根据物理内存调整 MaxClients,避免超出限制。
  • Worker:需确保 ThreadsPerChildMaxClients 的组合不会超过 ServerLimit
  • Event:仅在支持原子操作的平台使用,且不支持 HTTPS。
  • 通过合理选择 MPM 模式和配置参数,可以根据实际需求优化 Apache 的性能表现。

    转载地址:http://wtffk.baihongyu.com/

    你可能感兴趣的文章
    mysql explain关键字执行计划表解析系列一
    查看>>
    Mvc Session 设置以后再构造函数中取值时为null问题
    查看>>
    mysql explain字段含义
    查看>>
    MVC 区域功能
    查看>>
    mysql explain执行计划详解
    查看>>
    MySQL Explain详解
    查看>>
    mvc 添加控制器时运行所选代码生成器出错,未能加载文件或者程序集或他的一个依赖项
    查看>>
    MySQL FEDERATED 提示
    查看>>
    MVC 视图-模型,动态更新
    查看>>
    mysql float 转int
    查看>>
    mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
    查看>>
    Mysql group by
    查看>>
    MySQL GTID主备不一致修复方案
    查看>>
    MySQL I 有福啦,窗口函数大大提高了取数的效率!
    查看>>
    mysql id自动增长 初始值 Mysql重置auto_increment初始值
    查看>>
    mysql if then
    查看>>
    MySQL IFNULL() 函数使用注意点----干货
    查看>>
    MySQL in 太多过慢的 3 种解决方案
    查看>>
    MySQL InnoDB 三大文件日志,看完秒懂
    查看>>
    Mysql InnoDB 数据更新导致锁表
    查看>>