本文共 2015 字,大约阅读时间需要 6 分钟。
Apache 2.X 引入了多路处理模块(Multipprocessing Module,MPM),通过将核心任务处理作为可插拔的模块来优化性能。MPM 的核心目标是针对不同环境进行优化,最大化服务器性能。以下是三种主要 MPM 模式的工作原理及配置方法。
Prefork MPM 采用预派生子进程的方式,每个子进程独立处理请求。其工作原理类似于 Apache 1.3,主要适用于缺乏线程安全库的系统或需要避免线程兼容性问题的环境。Prefork 的优点是稳定性高,因为每个进程之间是完全隔离的。
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 的缺点是如果某个线程崩溃,整个进程会随之停止,因此需要确保线程安全。
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 不支持 HTTPS。
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
对比项 | Prefork | Worker | Event |
---|---|---|---|
进程特点 | 预派生子进程,无线程 | 混合多线程多进程 | 事件驱动,线程占用低 |
优点 | 稳定性高,适合线程安全模块 | 内存使用低,适合高并发 | 点击率高,性能优异 |
缺点 | 内存占用高,线程安全性依赖进程 | 线程崩溃会导致进程停止 | 不支持 HTTPS,试验性状态 |
适用场景 | 无线程安全库的系统 | 高流量 HTTP 服务器 | 高负载、高点击率应用 |
MaxClients
,避免超出限制。ThreadsPerChild
与 MaxClients
的组合不会超过 ServerLimit
。通过合理选择 MPM 模式和配置参数,可以根据实际需求优化 Apache 的性能表现。
转载地址:http://wtffk.baihongyu.com/