Apache系列知识(1)——prefork模式和worker模式

- 前言

谈到Apache,必然会谈到Apache的两种工作模式:prefork模式和worker模式。


- prefork模式

prefork模式是使用进程来处理请求,每个子进程在某个确定的时间只能维持一个连接。下面看看httpd.conf的prefork配置。

<IfModule prefork.c>
StartServers 5 #预创建子进程
MinSpareServers 5 #空闲子进程最小值
MaxSpareServers 10 #空闲子进程最大值
ServerLimit 10000 #子进程最大数量
MaxClients 10000 #同一时间接入请求的最大数量
MaxRequestsPerChild 10000 #单个子进程处理请求的最大数量
</IfModule>

说明:

  1. 当Apache启动时,Apache会自动创建StartServers个子进程,并且尽力将空闲子进程数保持在MinSpareServers和MaxSpareServers之间。
  2. 如果空闲子进程小于MinSpareServers,Apache将会以大约每秒1个的速度新建子进程。
  3. 如果空闲子进程大于MaxSpareServers,Apache将会删除多余的空闲子进程,释放服务器资源。
  4. ServerLimit表示同一时间子进程并存的最大数量。
  5. MaxClients表示同一时间接入请求的最大数量。
  6. MaxRequestsPerChild表示每个子进程在处理了多少次请求之后自动销毁,这个参数可以设置为0表示无限(即不销毁进程)。
- worker模式

worker模式是使用线程来处理请求。每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接。下面看看httpd.conf的worker配置。

<IfModule worker.c>
ServerLimit 25 #子进程最大数量
ThreadLimit 200 #单个子进程拥有线程的最大数量
StartServers 3 #预创建子进程
MaxClients 600 #同一时间接入请求的最大数量
MinSpareThreads 50 #单个子进程空闲线程最小值
MaxSpareThreads 100 #单个子进程空闲线程最大值
ThreadsPerChild 100 #单个子进程建立的常驻的执行线程数,默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。
MaxRequestsPerChild 10000 #单个子进程处理请求的最大数量
</IfModule>

说明:

  1. ThreadLimit表示单个子进程拥有线程的最大数量。
  2. MinSpareThreads表示单个子进程空闲线程最小值。
  3. MaxSpareThreads表示单个子进程空闲线程最大值。
  4. ThreadsPerChild表示单个子进程建立的常驻的执行线程数,默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。
- prefork模式和worker模式的对比

prefork模式基于进程的,无需内存管理,一般情况下内存的使用较大,适用于请求并发量不大的情景;
work模式基于线程的,处理高并发的请求较prefork模式具有优势。但线程共享内存空间,每个线程要确保是安全的。假如一个线程崩溃,整个进程就会连同其他线程一起”死掉”。.

- 总结

读完本文我们大致能了解prefork模式和worker模式的参数配置,以及他们之间的区别。
最后送一个彩蛋, ServerLimit和MaxClients有什么关系,这个值怎么设置?
ServerLimit是同一时间最大的进程数,MaxClients是同一时间最大的请求并发,所以他们的关系是MaxClients = ServerLimit * 单个进程的线程数


- 参考

[1] apache工作模式
http://www.cnblogs.com/moqiang02/p/4061421.html
[2] apache中MaxClients与MaxRequestsPerChild
https://www.cnblogs.com/dantes91/articles/4671048.html

猜你喜欢

转载自blog.csdn.net/xiangliqu/article/details/80912126