Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114101
  • 博文数量: 26
  • 博客积分: 1726
  • 博客等级: 上尉
  • 技术积分: 435
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-11 14:24
文章分类

全部博文(26)

文章存档

2013年(2)

2011年(2)

2010年(15)

2008年(7)

我的朋友

分类:

2010-10-15 09:21:53

Apache通过多路处理模块Multi-Processing ModuleMPM控制并发,常用的有两种模式:prefork(默认)和worker,通过apachectrl  -l可看到当前加载MPM模块(prefork.c或者worker.c)。

prefork模式是预派生子进程方式,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。
worker模式是多线程与多进程混合方式,使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。
总的来说,prefork方式速度要稍高于worker,然而它需要的cpumemory资源也稍多于woker
 
prefork模式
httpd.conf中,prefork的配置如下:
ServerLimit          2000
StartServers         300
MinSpareServers      5
MaxSpareServers     10
MaxClients          600
MaxRequestsPerChild 10000
prefork的工作原理是,控制进程在最初建立"StartServers"个子进程后,为了满足"MinSpareServers"设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
MaxClients是最重要的一个参数。可通过MaxClients来控制Apache并发数。
 
prefork指令
ServerLimit
默认的MaxClient最大是600个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache
生效前提:必须放在其他指令的前面。
StartServers
指定服务器启动时建立的子进程数量。应该要小于等于MaxClients
MinSpareServers
指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
MaxSpareServers
设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成MinSpareServers+1
MaxClients
限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为600。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit
MaxRequestsPerChild
MaxRequestsPerChild指令控制服务器杀死旧进程产生新进程的频率。每个子进程在其生存期内允许伺服的最大请求数量,默认为10000。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1. 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2. 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
 
worker模式
httpd.conf中,prefork的配置如下:
ServerLimit 25
ThreadLimit        200
StartServers        3
MaxClients         600
MinSpareThreads     50
MaxSpareThreads     100
ThreadsPerChild     100
MaxRequestsPerChild 10000
worker的工作原理是,由主控制进程生成"StartServers"个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreadsMaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
ThreadsPerChild
worker模式中与性能相关最密切的指令。这个指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。
阅读(607) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-15 16:23:24

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com