Apache常用工作模式:prefork和worker

| No Comments

  在Apche配置文件httpd.conf中,有两小节是关于prefork.c 模块和 woker.c 模块的设置。内容大概如下:

<IfModule prefork.c> 
ServerLimit 300
StartServers 5
MinSpareServers 5
MaxSpareServers 20
MaxClients 300
MaxRequestsPerChild 2000
</ifmodule>

<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</ifmodule>

 

   Apache 可以工作在prefork和worker两种模式下,可以通过 httpd -l 来确定当前Apache工作在哪种模式下。在编译Apache时,如果指定的是“--with-mpm=MPM”参数,那么Apache默认工作在profork模式下;如果指定的是“--with-mpm=worker”参数,那么Apache默认运行在worker模式下。在没有作任何模式指定,那么Apache默认将工作在prefok模式下。

  prefork采用预派生子进程的方式,用单独的子进程来处理不同的请求,进城之间彼此独立。

  • StartServers 表示在启动Apache时,就自动启动的进程数量。
  • MinSpareServers 设置了最小的空闲进程数量,这样可以不必再请求到来的时候产生新的进程,从而减少了系统开销以增加性能。
  • MaxSpareServers 设置了最大的空闲进程数量。如果空闲进程数量大于这个值,Apache救会自动关闭这些进程;如果这个值比MinSpareServers还小,那么Apache 会自动将其调整为MinSpareServers +1。
  • MacRequestPerChild 这项设置了每个子进程可以处理的最大请求数,也就是一个进程能够提供的最大传输次数。当一个进程的请求次数超过这个数量时,程序连接自动关闭。如果设置为0 就意味着无限,子进程永不销毁。这里设置的是2000,可以满足一般中小型网站的需要了。
  • MacClients 设定Apache 可以同时处理的请求数量,是对Apache性能影响最大的参数,默认值150对于中小型网站基本足够了,但是对于大型网站,是远远不够的。因为如果总请求一旦达到这个值,后面的请求就必须排队,这就是系统资源充足而网站访问却很慢的主要原因。理论上这个值设置的越大,可以处理的请求越多。但是Apache默认限制不能超过256,如果要设置的值大于256,可以直接使用SeverLimit加大MacClients。这里ServerLimit设置为300 。

  相对于prefork,worker是支持多线程和多进程的混合模型,它是由线程来处理请求的,因此可以处理更多的请求,对于系统资源的开销也比较小。

  • MiniSpareThreads 设置了最少的空闲线程数量。
  • MacSpareThreads 设置了最多的空闲线程数。
  • MaxClients 设定了同时连入客户端的最大数。如果现有子进程中的线程总数不能满足请求的负载,控制进程将派生出新的子进程。默认最大子进程数十16,加大时需要通过ServerLimit 来进行声明,ServerLimit 的最大值为20000。

  看到这里,你是不是已经知道了对于小内存的VPS应该如何设置了呢? ^^ 

注意:如果指定了ServerLimit ,那么此值乘以ThreadsPerChild 必须大于MaxClients ,而MaxClients 必须是ThreadsPerClild 的整数倍,否则Apache 将会自动调整到一个相应的值。

  • ThreadsPerChild 这里设置了每个子进程的工作线程数量,此值在worker 模式下与性能密切相关,默认最大值是64。如果系统负载很大,不能满足需求的话,需要使用ThreadLimit指令,此指令的最大值为20000。Worker模式下所能同时处理请求总数由子进程乘以ThreadsPerChild值来确定,保证大于或者等于MaxClient设定的值。

 

本文结束。

 

 

  

Leave a comment