博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
青蛙学Linux—Apache的MPM模式和httpd-mpm.conf
阅读量:4925 次
发布时间:2019-06-11

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

Apache目前一共有三种稳定的MPM模式(Multi-Processing Module,多进程处理模块),分别是prefork、worker和event,它们也代表着Apache的演变和发展。在Apache 2.0版本中默认使用的是prefork,2.2版本默认使用的是worker,2.4版本默认使用的是event。

可以使用Apache安装目录下的bin目录中的httpd查看当前使用的MPM模式,使用以下命令:

./httpd -V

返回的信息中Server MPM即为当前Apache使用的MPM模式。

如果要指定Apache的运行模式,可以在configure时使用

--with-mpm=prefork|worker|event

来指定具体使用的MPM模式,也可以使用

--enable-mpms-shared=all

使Apache支持全部三种MPM模式。

在Apache的子配置文件httpd-mpm.conf中可以对这三种MPM模式进行配置。

1、prefork

prefork是一个古老但是非常稳定的MPM模式,实现了一个非线程的、预派生子进程的工作机制。在Apache启动时,会预先派生出一些子进程,然后等待请求,这种方式可以减少频繁创建和销毁进程的开销;每个子进程只有一个线程,在一个时间点内只能处理一个请求,因此也不用担心线程安全问题。但是,一个进程占用的资源相对比较多,会消耗大量内存(正常情况下一个子进程占用2-3M内存),在处理高并发的时会存在性能瓶颈。

prefork的配置位于httpd-mpm.conf的如下部分:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 250 MaxConnectionsPerChild 0
  • StartServers:Apache在启动时自动启动的进程数
  • MinSpareServers:最小空闲进程数。保持空闲进程可以不必在请求到来时产生新的进程,以减小系统的开销
  • MaxSpareServers:最大空闲进程数。一旦空闲进程超过这里设置的值,Apache会自动关闭多余的进程;如果该值小于MinSpareServers,Apache会自动调整为MinSpareServers+1
  • MaxRequestWorkers:最大同时处理请求的进程数,也就是最大的同时连接数,超过该数目的请求将排队;该指令默认的最大值为256,如果需要加大要添加Server Limit指令 
  • MaxConnectionsPerChild:每个子进程可以处理的最大请求数,也就是一个进程所能提供的最大传输次数,当一个进程的请求超过此数目后,连接将自动关闭。0为无限,即子进程永不销毁,推荐设置为20000,基本能满足中小型网站的需要

2、worker

worker使用了多进程和多线程的混合模式。首先,预先派生出一些子进程,然后每个子进程会创建少量线程,同时包括一个监听线程,请求由线程提供服务。线程比起进程更轻量级,因为线程共享父进程的内存空间;多进程多线程模式可以最大的保证服务的稳定性。worker模式消耗内存较小,且由于拥有比较多的处理线程,可同时保持大量的连接,在高并场景下表现比prefork优秀;但是线程消耗的是CPU的资源,所以在worker模式下对于CPU的消耗较大。

worker的配置位于httpd-mpm.conf的如下部分:

StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 0
  • StartServers:Apache启动时的初始子进程数,默认最大的子进程数为16,加大时需要通过ServerLimit指令指定(最大值20000)
  • MinSpareThreads:最小空闲线程数
  • MaxSpareThreads:最大空闲线程数
  • ThreadsPerChild:每个子进程的工作线程数,该指令在worker模式下与性能密切相关,默认最大值为64,如果需要提高,使用ThreadLimit指令指定(最大值20000);worker模式下同时处理的请求数为子进程数乘以ThreadsPerChild,应该大于等于MaxRequestWorkers
  • MaxRequestWorkers:同时处理的最大请求数。如果现有自己成中的线程总数不能满足请求,控制进程将派生出新的子进程;该指令的值必须是ThreadsPerChild的整数倍,否则Apache会自动调整到一个合适的值;如果显示声明了ServerLimit,那么ServerLimit乘以ThreadsPerChild必须大于等于该指令的值
  • MaxConnectionsPerChild:子进程自动终止前可处理的最大连接数。子进程在处理完指定的连接次数之后,将会被父进程终止,此时子进程占用的内存也被释放。0为无限制,即不终止进程

3、event

event是Apache最新的MPM模式,与worker类似,但是event解决了worker下长连接线程的阻塞问题。在event中,会有专门的一些线程用来管理长连接类型的线程,当请求到达时,将请求传递给线程进行处理,处理完毕之后允许释放,这就增强了在高并发场景下的请求处理能力。

event的配置位于httpd-mpm.conf的如下部分:

StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 0

其中每个指令的含义同worker模式。

转载于:https://www.cnblogs.com/yu2006070-01/p/10303808.html

你可能感兴趣的文章
DAG
查看>>
使用MVVM框架时,如何处理在页面动态渲染完之后需要发生的事件呢?
查看>>
StringBuilder与StringBuffer的区别
查看>>
String、StringBuffer、StringBuilder
查看>>
(转)导出EXCEL时科学计数法问题
查看>>
SVN客户端与服务器端搭建
查看>>
知识点整理一
查看>>
判断浏览器
查看>>
python并发编程之进程池,线程池concurrent.futures
查看>>
rdd的元素打印
查看>>
hdu4812 点分治水题
查看>>
最长回文子串(Manacher算法)
查看>>
第一次博客
查看>>
写给自己
查看>>
部署全局ajax处理
查看>>
Codeforces Round #403(div 2)
查看>>
大型网站处理高并发要点技术
查看>>
Codeforces-1059D:Nature Reserve问最大的圆包含全部点
查看>>
牛客练习赛24
查看>>
转发推荐系统文章
查看>>