Apache两种常用工作模式:prefork和worker。

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常用2种工作模式prefork和worker比较的更多相关文章

  1. apache常用的两种工作模式 prefork和worker

    apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式 一.两种模式 prefork模式: prefork是 ...

  2. Apache的三种工作模式及相关配置

    Apache的三种工作模式 作为老牌服务器,Apache仍在不断地发展,就目前来说,它一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块).它们分别是 prefor ...

  3. (转载)关于Apache 的两种工作模式

    今天在查看服务器的时候,发现服务器http请求数 每天增长越来越多,在优化集群服务器的时候,查看到Apache 的工作模式是prefork,于是想到了worker 模式, 想暂时的把当前运行模式改成w ...

  4. Apache的三种工作模式

    Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. 它们分别是prefork,worker和event,它们同时也代表这Apac ...

  5. Apache三种工作模式详解

    Apache HTTP服务器被设计为一个强大的.灵活的能够在多种平台以及不同环境下工作的服务器.这种模块化的设计就叫做“多进程处理模块”(Multi-Processing Module,MPM),也叫 ...

  6. Apache-三种工作模式(prefork/ worker/Event)

    Apache-两种工作模式(prefork/ worker/Event) Apache 2.X  支持插入式并行处理模块,称为多进程处理模块(MPM).在编译apache时必须选择也只能选择一个MPM ...

  7. LVS原理详解(3种工作模式及8种调度算法)

    2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法)   LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期: ...

  8. httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略

    之前偷懒默认用yum安装了httpd.后来发现服务器内存暴增,一度达到75% 打开一看,好嘛后台休眠进程全是httpd. 重启之后再度访问发现内存还是稳步增长. [root@iz2ze3ayxs2yp ...

  9. VMWare提供了三种工作模式上网

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

随机推荐

  1. UOJ #149 [NOIP 2015] 子串

    传送门 Solution DP+滚动数组. DP状态 \(dp[i][j][k]\): \(A\)的第\(i\)个字符和\(B\)的第\(j\)个字符匹配且该字符在第\(k\)个子串中的方案数. 转移 ...

  2. 如何执行一条命令在C#里面。Process

    Download source - 4.15 KB Introduction It is normal practice to open the Windows command prompt and ...

  3. Mysql学习笔记(八)由触发器回顾外键约束中的级联选项

    近些天都没有写博客.在学习mysql的知识,通过学习和练习,也熟悉了mysql的函数.触发器.视图和存储过程.并且在实际的开发过程中也应用了一小部分.效果还是十分理想的. 今天晚上在学习触发器模仿in ...

  4. arcglobe 图层三大类说明

    若是第一次打开,且在网络连接通畅的情况下,你会发现目录中已有部分数据层,这些数据层是由ArcGIS Online的在线数据:Imagery图层即在线的影像数据.高程数据.地名数据.运输线数据. Arc ...

  5. Oracle开发常用函数与存储过程

    create or replace function Fuc_Get_AuthorName(RecID_In in varchar2, AdmID_In in varchar2) return var ...

  6. Bois设置教程

    BIOS设置图解教程之Award篇 (目前主板上常见的BIOS主要为AMI与AWARD两个系列,如何辨别BIOS品牌系列请移步,本文详细讲解Award系列的BIOS设置图解教程,如果你的BIOS为AM ...

  7. pyinstaller 官方介绍

    http://www.pyinstaller.org/ pyinstaller支持多个平台,windows,linux,mac,兼容多个第三方包,包括pyqt,django,matplotlib Py ...

  8. Android学习笔记——LinearLayout

    该工程的功能是实现LinearLayout 以下的代码是MainActivity.java中的代码 package com.example.linearlayout; import android.a ...

  9. 谁再说Matlab速度慢,我跟谁急

    谁再说Matlab速度慢,我跟谁急 一.未进行内存预分配 y = 0; tic; for i=2:100000; y(i+1) = y(i)+ randn; end; toc 时间已过 0.03122 ...

  10. Unity3D Animation Curve

    http://docs.unity3d.com/430/Documentation/Manual/UsingAnimCurves.html