您的位置:首页 > 运维架构 > Apache

Apache的prefork进程模式参数详解和调优

2017-05-25 13:32 316 查看

Apache的prefork进程模式参数详解和调优

MPM:Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译 apache 时必须选择且只能选择1个 MPM
默认支持 3 种:PreforkWorkerEvent(不稳定)
编译时不指定默认为prefork模式

Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的、预派生的 web 服务器,它的工作方式类似于 Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相亏独立的情况下最好的 MPM,这样若一个请求出现问题就不会影响到其他请求。
这个 MPM 具有徆强的自我调节能力,叧需要徆少的配置指令调整。最重要的是将 MaxClients 设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
注: Prefork 是基于多进程的模式。一个进程处理一个请求
优点:因为每个进程使用独立的内存空间,所以比较安全。一个进程坏了,不会影响其他进程。
缺点:占用的内存比较大。

Prefork MPM的配置和调优

主配置文件打开Include conf/extra/httpd-mpm.conf的注释
vi /usr/local/apache/conf/extra/httpd-mpm.conf

配置文件中,包含了2中运行模式的参数



prefork模式的参数:
<IfModule mpm_prefork_module>
ServerLimit  3000
#最大进程数,需要手工添加
MaxClients 3000
#最大并发数,需要手工添加
StartServers 5
#启动时默认启动的进程数
MinSpareServers 5
#最小空闲进程
MaxSpareServers 10
最大空闲进程
MaxRequestWorkers 250
#最大并发数,需要手工添加
MaxConnectionsPerChild 0
#每个子进程在其生存期内允许处理的最大请求数量
</IfModule>

参数详解:
ServerLimit  :
c870
最大的进程数
MaxClients  :最大的请求并发。
#最大请求并发直接体现了网站的性能
①. MaxClients=ServerLimit*进程的线程数
#在 prefork 模式下一个进程只有一个线程,MaxClients 不得大于 ServerLimit 参数。
②ServerLimit 的大小,取决于你系统的资源。
例如:每个 apache 进程默认占用 2M 内存,如果你的服务器上运行 apache 服务器,基本可以按照这个公式来计算:
最大内存*80%/2M=ServerLimit
注:一个 apache 进程实际使用内存大小和处理的请求数有关。即和 MaxRequestsPerChild 这个值有关。
③StartServers 50 启动时默认启动的进程数
这个参数默认是 5,因为 apache 会通过自动启动新进程来增加响应服务的进程数,这个值不做调整的也是可以的,会由默认的 5 增加到满足服务的进程数,但是会出现开始启动后,突然后有大并发访问时,会因为进程数太小,出现卡住的现象。
注:所以不要一次启动太多的 apache 进程,启动足够用的进程即可。
④MinSpareServers 55 最小空闲进程
如果当前空闲子进程数少于 MinSpareServers ,那么 Apache 将以第一秒一个,第二秒两个,第三秒四个,按指数递增个数的速度产生新的子进程。如此按指数级增加创建的进程数,最多达到每秒 32 个,直到满足 MinSpareServers 设置的值为止;
MinSpareServers 指令设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。

⑤MaxSpareServers 100 最大空闲进程
如果当前有超过 MaxSpareServers 数量的空闲子进程,那举父进程将杀死多余的子进程。
#在一台压力大(并发访问 2800)的服务器上MaxSpareServers 这个值设置的是 200。
MaxSpareServers 指令设置空闲子进程的最大数量。所谓空闲子进程是指没有正在处理请求的子进程。
可以调整 MinSpareServers 和 MaxSpareServers 这两个参数,但是这两个参数的值不能设得太大,否则 apache 进程太多,会导致内存占用太多。



⑥.MaxRequestsPerChild 1000
每个子进程在其生存期内允许处理的最大请求数量。
到达MaxRequestsPerChild 的限制后,子进程将会结束。如果 MaxRequestsPerChild 为"0",子进程将永进不会结束。
#将 MaxRequestsPerChild 设置成非零值有两个好处:
* 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
* 给进程一个有限寿命,从而有劣于当服务器负载减轻的时候减少活劢进程的数量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息