Apache perfork的服务器模型(补充work模型)

概要

Apache perfork的服务器模型(补充work模型)_第1张图片

此架构模式中存在一个主进程和多个子进程。每个子进程都会为所进行的请求侦听一个套接字。当接受到请求之后,子进程就会接受它并且提供响应。父进程会监控所有的子进程以确保总是可以使用最少数量的进程来处理请求,并且确保等候请求到达的闲置进程不能过少。如果没有足够的空闲进程来处理潜在的请求高峰,那么父进程就会启动新的子进程。如果存在过多的进程,那么父进程会每次终止一个空闲进程,直到服务器回到最大空闲子进程数量之下。通过保持一定数量的空闲子进程来接受所引入的请求,服务器就可以避免在接受到请求时再去启动新进程的开销。 父进程和子进程之间通过记分板进行通信。对于每一个产生的子进程,它的状态信息都写入到记分板中,父进程通过读取记分板可以了解子进程的状态。当需要关闭子进程的时候它将通过终止管道发送终止信息给子进程,另外的一种通知方法就是通过信号。


配置详解

查看当前的连接数可以用:
ps aux | grep httpd | wc -l 或:pgrep httpd|wc -l

计算httpd占用内存的平均数:
常规按20M来算也成
服务器内存有8G,除去常规启动的服务大约需要一些(保守估计),
就当6G可用,那么理论上可以支持6*1024M/20M = 322 个用户?

ServerLimit 1000
StartServers 30
MinSpareServers 30
MaxSpareServers 45
MaxClients 1000
MaxRequestsPerChild 4000

如果空闲进程小于MinSpareServers,Apache将会以大约每秒1个的速度新建进程。
如果空闲进程小于MaxSpareServers,Apache将会删除多余的空闲进程,释放服务器资源。

MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。
0意味着无限,即子进程永不销毁。但如果设成非零值可防止意外的内存泄漏。

MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。
如果请求总数已达到这个值(可通过ps -ef|grep httpd|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。
虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。

ServerLimit:可以通过在配置开头增加ServerLimit项目来突破256的限制. 要定义在maxClient 之前,必须MaxClients ≤ ServerLimit ≤ 20000

注意,虽然通过设置ServerLimit,我们可以把MaxClients加得很大,但是往往会适得其反,系统耗光所有内存。
以我手头的一台服务器为例:内存2G,每个apache进程消耗大约0.5%(可通过ps aux来确认)的内存,也就是10M,
这样,理论上这台服务器最多跑200个apache进程就会耗光系统所有内存,所以,设置MaxClients要慎重。




work 模型


# worker MPM
#
# For tuning recommendations, refer to <NEWINFOCENTERURL>.
#
# ThreadLimit: maximum setting of ThreadsPerChild,配置后可以超越ThreadsPerChild的限制(ThreadLimit要写在前面
# ServerLimit: maximum setting of StartServers 最大进程数
# StartServers: initial number of server processes to start 初始化进程数
# MaxClients : maximum number of simultaneous client connections 同时能处理的最大并发量
# MinSpareThreads: minimum number of worker threads which are kept spare 最小空闲线程数
# MaxSpareThreads: maximum number of worker threads which are kept spare最大空闲线程数
# ThreadsPerChild: constant number of worker threads in each server process每个进程下面运行的线程数
# MaxRequestsPerChild: maximum number of requests a server process serves 每个线程最多能处理多少请求就被销毁
<IfModule worker.c>
ThreadLimit         25
ServerLimit         64
StartServers         1
MaxClients         600
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>



你可能感兴趣的:(Apache perfork的服务器模型(补充work模型))