博客
关于我
MPM模块
阅读量:796 次
发布时间: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/

    你可能感兴趣的文章
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>
    multi_index_container
    查看>>
    MySQL DBA 进阶知识详解
    查看>>
    Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
    查看>>
    Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
    查看>>
    MurmurHash 与其他哈希算法的区别
    查看>>
    mysql deadlock found when trying to get lock暴力解决
    查看>>
    Musetalk如何优化嘴部,提高清晰度?
    查看>>
    MuseTalk如何生成高质量视频(使用技巧)
    查看>>
    mysql default unix_timestamp(now())
    查看>>
    mutiplemap 总结
    查看>>
    MySQL DELETE 表别名问题
    查看>>
    Mutual Training for Wannafly Union #8 D - Mr.BG Hates Palindrome 取余
    查看>>
    MySql DML语言新增多行数据、修改删除多个表
    查看>>
    MVC 301重定向(永久重定向不带www域名到带www的域名)
    查看>>
    Mysql Dump命令
    查看>>
    Mvc Action可以通过jsonp方式调取
    查看>>