Apache常用2种工作模式prefork和worker比较
2016-07-14 01:44
876 查看
Apache两种常用工作模式:prefork和worker。
prefork MPM
prefork是一个非线程型的、预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大。
可通过了解prefork的配置认识prefork,配置位置:apache/conf/extra/httpd-mpm.conf
参数:
–StartServer:服务器启动时一次建立的子进程数量
–MinSpareServers:设置空闲子进程的最小数量。如果当前空闲子进程数少于这个值,那么Apache会从一秒创建一个进程,第二秒继续创建两个…直到满足MinSpareServers设置的值为止。不需要设的太大。
–MaxSpareServers:设置空闲子进程的最大数量。如果空闲子进程数量超过MaxSpareServers,apache则会kill掉多余空闲子进程。
–MaxClients:设定apache同一时间处理的最大请求数量。任何超过MaxClients的请求都将进入等候对列。默认最大为256,要设置大于256时,必须同时设置ServerLimit(保持ServerLimit大于或等于MaxClient)。如果发现请求处理很慢但系统资源使用少,就需要调高这个参数。
–MaxRequestsPerChild:每个子进程最多处理的请求数量,到达这个值,子进程将会自动结束,这样可以避免内存泄漏。设为0则永远不结束。
–ServerLimit:用于限制MaxClient,最大值为20000,超过了就需要修改apache内核重新编译。注意此参数必须放在其他参数之前。
最重要的值是MaxClients允许足够多的工作进程,同时又不会导致服务器当机。
可通过查看httpd进程数:#ps -ef | grep httpd | wc -l,选择高峰期,结合当时服务器资源使用情况,来设置MaxClients。
worker MPM
worker是支持混合的多线程多进程的多路处理的MPM,使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只处理一个连接,内存使用较低,但一个线程崩溃,就会影响同一个进程下的所有线程。
同样通过配置认识worker
参数:
–StartServer:服务器启动时一次建立的子进程数量
–MaxClients:设定apache同一时间处理的最大请求数量,这里是指最大线程数量,大小仍受ServerLimit限制且必须是ThreadsPerChild的倍数。
–MinSpareThreads:设置最少的空闲线程数
–MaxSpareServers:设置最大的空闲线程数,必须大于等于MinSpareThreads加上ThreadsPerChild的和(因为每个子进程拥有的线程数是固定的)
–ThreadsPerChild:每个子进程建立的常驻线程,之后不会再创建新的线程。大小受ThreadLimit限制。
–MaxRequestsPerChild:每个子进程最多处理的请求数量,同prefork的一样
–ServerLimit:服务器允许配置的进程数上限,和ThreadLimit共同限制MaxClients(MaxClients <= ServerLimit * ThreadsPerChild)。
–ThreadLimit:TreadsPerChild可以配置的线程数上限,默认为64。
根据网友一些测试数据,实际情况下还是选prefork工作模式较好。
默认情况下,Linux下的Apache是prefork模式,切换成worker模式步骤如下:
prefork和worker模式的切换
1.将当前的prefork模式启动文件改名
mv httpd httpd.prefork
2.将worker模式的启动文件改名
mv httpd.worker httpd
3.修改Apache配置文件
vim /usr/local/apache2/conf/extra/httpd-mpm.conf
找到里边的如下一段,可适当修改负载等参数:
4.重新启动服务
/usr/local/apache2/bin/apachectl restart
即可换成worker方式启动apache2
处于稳定性和安全性考虑,不建议更换apache2的运行方式,使用系统默认prefork即可。另外很多PHP模块不能工作在worker模式下,例如redhat Linux自带的PHP也不能支持线程安全。所以最好不要切换工作模式。
网友评论:
for redhat
在 /etc/sysconfig/httpd 打开 #HTTPD=/usr/sbin/httpd.worker 的注释
请教 .mpm_worker +mod_php 有在用到生产么?
worker mpm一般不会跟mod_php搭配,worker mpm一般都是跟apache的mod_fcgid 搭配,然后PHP要安装php-cgi 来跑PHP的。
海哥CentOS博客的LAMP一键安装包写到:
延伸阅读:
Apache prefork 模块指令分析
prefork MPM
prefork是一个非线程型的、预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大。
可通过了解prefork的配置认识prefork,配置位置:apache/conf/extra/httpd-mpm.conf
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
参数:
–StartServer:服务器启动时一次建立的子进程数量
–MinSpareServers:设置空闲子进程的最小数量。如果当前空闲子进程数少于这个值,那么Apache会从一秒创建一个进程,第二秒继续创建两个…直到满足MinSpareServers设置的值为止。不需要设的太大。
–MaxSpareServers:设置空闲子进程的最大数量。如果空闲子进程数量超过MaxSpareServers,apache则会kill掉多余空闲子进程。
–MaxClients:设定apache同一时间处理的最大请求数量。任何超过MaxClients的请求都将进入等候对列。默认最大为256,要设置大于256时,必须同时设置ServerLimit(保持ServerLimit大于或等于MaxClient)。如果发现请求处理很慢但系统资源使用少,就需要调高这个参数。
–MaxRequestsPerChild:每个子进程最多处理的请求数量,到达这个值,子进程将会自动结束,这样可以避免内存泄漏。设为0则永远不结束。
–ServerLimit:用于限制MaxClient,最大值为20000,超过了就需要修改apache内核重新编译。注意此参数必须放在其他参数之前。
最重要的值是MaxClients允许足够多的工作进程,同时又不会导致服务器当机。
可通过查看httpd进程数:#ps -ef | grep httpd | wc -l,选择高峰期,结合当时服务器资源使用情况,来设置MaxClients。
worker MPM
worker是支持混合的多线程多进程的多路处理的MPM,使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只处理一个连接,内存使用较低,但一个线程崩溃,就会影响同一个进程下的所有线程。
同样通过配置认识worker
<IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
参数:
–StartServer:服务器启动时一次建立的子进程数量
–MaxClients:设定apache同一时间处理的最大请求数量,这里是指最大线程数量,大小仍受ServerLimit限制且必须是ThreadsPerChild的倍数。
–MinSpareThreads:设置最少的空闲线程数
–MaxSpareServers:设置最大的空闲线程数,必须大于等于MinSpareThreads加上ThreadsPerChild的和(因为每个子进程拥有的线程数是固定的)
–ThreadsPerChild:每个子进程建立的常驻线程,之后不会再创建新的线程。大小受ThreadLimit限制。
–MaxRequestsPerChild:每个子进程最多处理的请求数量,同prefork的一样
–ServerLimit:服务器允许配置的进程数上限,和ThreadLimit共同限制MaxClients(MaxClients <= ServerLimit * ThreadsPerChild)。
–ThreadLimit:TreadsPerChild可以配置的线程数上限,默认为64。
根据网友一些测试数据,实际情况下还是选prefork工作模式较好。
默认情况下,Linux下的Apache是prefork模式,切换成worker模式步骤如下:
prefork和worker模式的切换
1.将当前的prefork模式启动文件改名
mv httpd httpd.prefork
2.将worker模式的启动文件改名
mv httpd.worker httpd
3.修改Apache配置文件
vim /usr/local/apache2/conf/extra/httpd-mpm.conf
找到里边的如下一段,可适当修改负载等参数:
<IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
4.重新启动服务
/usr/local/apache2/bin/apachectl restart
即可换成worker方式启动apache2
处于稳定性和安全性考虑,不建议更换apache2的运行方式,使用系统默认prefork即可。另外很多PHP模块不能工作在worker模式下,例如redhat Linux自带的PHP也不能支持线程安全。所以最好不要切换工作模式。
网友评论:
for redhat
在 /etc/sysconfig/httpd 打开 #HTTPD=/usr/sbin/httpd.worker 的注释
请教 .mpm_worker +mod_php 有在用到生产么?
worker mpm一般不会跟mod_php搭配,worker mpm一般都是跟apache的mod_fcgid 搭配,然后PHP要安装php-cgi 来跑PHP的。
海哥CentOS博客的LAMP一键安装包写到:
++++++++++++++++++++++++++++++++++++++++++++++++ echo "select the mpm of apache" echo "1) prefork (Recommend)" echo "2) worker (Multi-threaded)" echo "3) event (Multi-threaded,not support ssl.)" ++++++++++++++++++++++++++++++++++++++++++++++++
延伸阅读:
Apache prefork 模块指令分析
相关文章推荐
- Apache 优化配置10条建议
- Apache prefork 模块指令分析
- CentOS6.3 编译安装LAMP(2):编译安装 Apache2.2.25
- Linux下Apache、PHP、MySQL默认安装路径
- Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4
- centos6.4 64bit部署安装apache+svn
- 如何启用 Apache 的 PHP-FPM 多实例
- Apache Maven 入门篇 ( 上 )
- Apache服务器配置默认首页文件名和网站路径
- windows apache开启url rewrite
- Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块
- java.lang.ClassNotFoundException: org.apache.hadoop.hive.hbase.HBaseSplit
- apache commons fileupload 依赖信息(2016-07-01更新)
- org.apache.struts.action.InvalidCancelException异常解决方法
- Windows端Apache的域名映射
- apache安装及配置
- How To Set Up Apache Virtual Hosts on Ubuntu 14.04 LTS
- 使用VisualSVN 钩子脚本,同步到web应用目录
- apache commons fileupload checkstyle报告(2016-07-01更新)
- Linux/CentOS 服务安装/卸载,开机启动chkconfig命令详解|如何让MySQL、Apache开机启动?