Apache prefork模式和worker模式参数详解

prefork模式和worker模式参数详解php

使用httpd -l命令查看使用的线程模块,通常是prefork.c和work.c二者,前者居多。肯定后修改http配置文件相应的部分,如prefork.c的:mysql

<IfModule prefork.c>
StartServers 5
MinSpareServers 3
MaxSpareServers 10
ServerLimit 16
MaxClients 16
MaxRequestsPerChild 2000
</IfModule>

其中配置项:
web

StartServers : 服务启动时启动进程数sql

MinSpareServers : 最小空闲进程,随时等待响应shell

MaxSpareServers:最大空前进程,响应结束时,减小进程安全

ServerLimit:最大进程数,多线程

MaxClients:同时响应的最大请求数,多出等待并发

# MaxClients=ServerLimit*进程的线程数。线程

MaxRequestsPerChild:每一个进程请求这么屡次后就释放从新创建(为0时永远不释放)。设计


1.对于perfork.c模块,其特色是

每一个子进程只有一个线程。每一个进程在某个肯定的时间只能维持一个链接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,可是内存使用大得多。prefork的无线程设计在某些状况下将比worker更有优点:它可使用那些没有处理好线程安全的第三方模块。

既然是一个进程一个线程,因此在prefork.c下,这两个值是相等的。注:ServerLimit最大值为2000.

2.对于work.c模块来讲,是多线程的,默认是一个进程有25个线程,所以若是设置ServerLimit为100,那么MaxClients最大能够设置为2500。

这里说说咱们可怜的vps,为了省钱通常只有512m-1g的内存,而prefork.c一个进程占用30-45m左右的内存(这个值跟php- fpm下php-cgi内存占用至关),因此若是有512m的内存话,系统+mysql(最小节约配置)吃掉250m左右,剩下的内存也就是跑10个进 程,因此这个值真的是很可怜,不过对于流量小的站点,这个并发也够用了,通常跑个上千的流量不是问题。因此作web服务,有钱仍是多弄点内存的好,或者跑 lnmp是比较合适的选择。

相关文章
相关标签/搜索