apache 工作模式

标签: apache 工作 模式 | 发表时间:2015-01-26 18:03 | 作者:喜欢蓝色的我
出处:http://www.iteye.com

prefork 工作模式 

如果httpd -l列出prefork.c。则表示是 prefork 工作方式。 如下面所示:    
Compiled in modules:     
  core.c     
  prefork.c     
  http_core.c     
  mod_so.c

这表明当前apache2的工作方式是 prefork

prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

对于 prefork 工作模式的 apache 来说,在 httpd.conf(主配置文件) 中对它的设置是在

# prefork MPM    
# StartServers: number of server processes to start     
# MinSpareServers: minimum number of server processes which are kept spare     
# MaxSpareServers: maximum number of server processes which are kept spare     
# ServerLimit: maximum value for MaxClients for the lifetime of the server     
# MaxClients: maximum number of server processes allowed to start     
# MaxRequestsPerChild: maximum number of requests a server process serves     
<IfModule prefork.c>     
StartServers       8     
MinSpareServers    5     
MaxSpareServers   20     
ServerLimit      256     
MaxClients       256     
MaxRequestsPerChild  4000     
</IfModule>

ServerLimit   
默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。    
如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。    
生效前提:必须放在其他指令的前面

StartServers   
指定服务器启动时建立的子进程数量,prefork默认为5。

MinSpareServers   
指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。

MaxSpareServers   
设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。    
此参数不要设的 太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″。

MaxClients   
限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,    队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。

MaxRequestsPerChild   
每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。    
如果 MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:    
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。    
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。


按照前面的设置,在该工作模式下,服务器启动后起动8个httpd进程(加父进程共9个,通过 ps -ax|grep httpd命令可以看到)。    
当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork(复制)一个子进程。    
直到内存中的空闲进程达到MaxSpareServers。该模式是为了兼容一些旧版本的程序。缺省编译时的选项。

 

worker 工作模式

如果httpd -l列出worker.c ,类似如下,则表示是 worker 工作模式

Compiled in modules:   
  core.c    
  worker.c    
  http_core.c    
  mod_so.c

worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

这时候的配置文件如下:

# worker MPM   
# 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>    
StartServers         2    
MaxClients         150    
MinSpareThreads     25    
MaxSpareThreads     75     
ThreadsPerChild     25    
MaxRequestsPerChild  0    
</IfModule>

StartServers   
服务器启动时建立的子进程数,默认值是”3″。

MaxClients   
允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是”400″ ,    16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。

MinSpareThreads   
最小空闲线程数,默认值是”75″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。

MaxSpareThreads   
设置最大空闲线程数。默认值是”250″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。     
MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:    
worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和。

ThreadsPerChild   
每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。

MaxRequestsPerChild   
设 置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果 MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:    
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。    
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。    
注意对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。

该模式是由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。   
服务器在启动时启动两个进程,每个进程产生的线程数是固定的 (ThreadsPerChild决定),因此启动时有50个线程。    
当50个线程不够用时,服务器自动fork一个进程,再产生25个线程。

转载:http://my.oschina.net/leeypp1/blog/298790

 

————————————————————————————————————————————————

更换apache 工作模式

vi /etc/sysconfig/httpd 

 

 

HTTPD=/usr/sbin/httpd.worker 打开就是worker类型

 

重启apache 

[@sh5_44.3 bin]#  /etc/init.d/httpd restart

Stopping httpd:                                            [  OK  ]

 

Starting httpd:                                            [  OK  ]

 

查看是否更改类型------prefork

[@sh5_44.3 bin]# ps aux |grep httpd

root     32472  0.0  0.0 179088  9388 ?        Ss   17:46   0:00 /usr/sbin/httpd

apache   32474  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

apache   32475  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

apache   32476  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

apache   32477  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

apache   32478  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

apache   32479  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

apache   32480  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

apache   32481  0.0  0.0 179088  2424 ?        S    17:46   0:00 /usr/sbin/httpd

 

root     32483  0.0  0.0 103296   808 pts/4    S+   17:47   0:00 grep httpd

查看是否改变类型------下面是worker

[@sh5_44.3 bin]# ps aux |grep httpd

root     31902  0.0  0.0 176048  6328 ?        Ss   17:42   0:00 

 

/usr/sbin/httpd.worker

apache   31904  0.0  0.0 1145248 6196 ?        Sl   17:42   0:00 

 

/usr/sbin/httpd.worker

apache   31905  0.0  0.0 1145248 6196 ?        Sl   17:42   0:00 

 

/usr/sbin/httpd.worker

apache   31907  0.0  0.0 1145248 6200 ?        Sl   17:42   0:00 

 

/usr/sbin/httpd.worker

apache   31910  0.0  0.0 1145248 6200 ?        Sl   17:42   0:00 

 

/usr/sbin/httpd.worker

apache   31925  0.0  0.0 1145248 6200 ?        Sl   17:42   0:00 

 

/usr/sbin/httpd.worker

 

root     32461  0.0  0.0 103300   808 pts/4    S+   17:46   0:00 grep httpd

 

—————————————————————————————————————

 其他可参看的连接

http://www.360doc.com/content/12/0414/16/3725126_203550434.shtml

http://mo2g.com/view/50/

http://blog.csdn.net/lifetragedy/article/details/7707455

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [apache 工作 模式] 推荐:

apache 工作模式

- - 互联网 - ITeye博客
如果httpd -l列出prefork.c. 则表示是 prefork 工作方式. 这表明当前apache2的工作方式是 prefork. prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止.

Apache的prefork模式和worker模式

- - 编程语言 - ITeye博客
apache常用的工作模式有prefork和worker模式. 运行命令httpd -l 或者apache2 -l ,输出的结果中如果含有prefork.c,那就是prefork模式,如果结果中含有worker.c,那就是worker模式. 原文: http://www.ccvita.com/339.html.

采用ajp代理模式配置Apache+tomcat实现负载均衡

- - 研发管理 - ITeye博客
这一种方法,配置简单,性能也高. apache 必须是2.2.x以上版本.       AJP是Apache提供的完成与其它服务器通讯的一种协议. 在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_ajp模块.

Apache Shiro 介绍

- - CSDN博客推荐文章
什么是Apache Shiro?. Apache shiro 是一个强大而灵活的开源安全框架,可清晰地处理身份认证、授权、会话(session)和加密. Apache Shiro最主要的初衷是为了易用和易理解,处理安全问题可能非常复杂甚至非常痛苦,但并非一定要如此. 一个框架应该尽可能地将复杂的问题隐藏起来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码.

Apache Derby Papers

- -
Derby Type System (Note: if your browser shows HTML source for this page instead of displaying it, save the file locally with . It will prompt you to click on "Grant license to ASF for inclusion in ASF works", and this is the permission we need in place to host your contribution on the Derby web site..

Apache防止攻击

- - 小彰
为了防止恶意用户对Apache进行攻击,我们需要安装mod_security这个安全模块. mod_security 1.9.x模块的下载与安装. 下载地址: http://www.modsecurity.org/download/index.html. 建议使用1.9.x,因为2.x的配置指令与1.x完全不同,解压后进入解压目录,执行:.

Apache OpenOffice 3.4发布

- - Solidot
Apache OpenOffice的第一个版本v3.4正式发布. 主要新特性包括:改进ODF支持,包括ODF 1.2加密选项和新电子表格功能;改进Calc组件的数据透视表(Pivot Table)支持;原生支持SVG,增强图形如线帽和剪切变形;简体和繁体中文等原生语言支持;改进性能等. 在甲骨文将OpenOffice.org捐给Apache软件基金会后,OOo的命运曾存在许多争议.

Apache PDFBox 1.8.0 发布

- - 开源中国社区最新新闻
Apache PDFBox 1.8.0 发布了,该版本除了修复大量 bug 之外,还包含如下新特性:. PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具. PDF 文档加密与解密. 与 Lucene搜索引擎的集成. 填充PDF/XFDF表单数据.

Apache Log4j 2.0介绍

- - CSDN博客推荐文章
Apache Log4j 2.0介绍. 作者:chszs,转载需注明. 作者博客主页:http://blog.csdn.net/chszs. Apache Log4j是著名的Java日志框架之一,在早些年应用最广. 但近两年来,随着SLF4J和LogBack的兴起,很多流行的开源框架在日志模块方面逐步转移到SLF4J+LogBack上,Log4j日渐衰落.

Apache 的 MaxClients 與 MaxRequestsPerChild

- - SSORC.tw
對於 Apache 架設的伺服器,在遇到連線數問題上,以下參數是會考慮微調的. 不過遇到多個 VirtualHost 與連線變多時,需要適時調整. ServerLimit 與 MaxClients 是針對同時間最大連線數為多少,也等於是 Apache 程序數量,ps 一下就會有多少個 /usr/sbin/httpd 等.