来源:蜘蛛抓取(WebSpider)
时间:2016-08-30 09:10
标签:
maxrequestperchild
apache三种工作模式
三种MPM参数分析 & &
不管你安装的是apache哪种MPM
在安装完成之后打开.../apache/conf/extra/httpd-mpm.conf文件,找到如下配置:
# perfork MPM
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
# StartServers: 数量的服务器进程开始
# MinSpareServers: 最小数量的服务器进程,保存备用
# MaxSpareServers: 最大数量的服务器进程,保存备用
# MaxRequestWorkers: 最大数量的服务器进程允许开始
# MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
prefork
控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两
个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式
可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个
值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为
MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自
动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
1、可防止意外的内存泄 漏。2、在服务器负载下降的时侯会自动减少子进程数。
因此,可根据服务器的负载来调整这个值。
MaxRequestWorkers指令集同时将服务请求的数量上的限制。任何连接尝试在MaxRequestWorkerslimit将通常被排队,最多若干基于上ListenBacklog指令。&
在apache2.3.13以前的版本MaxRequestWorkers被称为MaxClients 。
(MaxClients是这些指令中最为重要的一个,设定的是
Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps
-ef|grep http|wc
-l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以
处理的请求就越多,但Apache默认的限制不能大于256。)
# worker MPM&
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250&
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
# StartServers: 初始数量的服务器进程开始
# MinSpareThreads: 最小数量的工作线程,保存备用
# MaxSpareThreads: 最大数量的工作线程,保存备用
# ThreadsPerChild: 固定数量的工作线程在每个服务器进程
# MaxRequestWorkers: 最大数量的工作线程
# MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
Worker
由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,
为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;
而MaxRequestWorkers
设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程&
MinSpareThreads和
MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节
ThreadsPerChild是worker
MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用
ThreadLimit指令,它的最大缺省值是20000。&
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild
值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时
也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以
ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则
Apache将会自动调节到一个相应值。
# event MPM
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
# StartServers:初始数量的服务器进程开始
# MinSpareThreads: 最小数量的工作线程,保存备用
# MaxSpareThreads: 最大数量的工作线程,保存备用
# ThreadsPerChild: 固定数量的工作线程在每个服务器进程
# MaxRequestWorkers: 最大数量的工作线程
# MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Posts - 259,
Articles - 1,
Comments - 2140
大人不华,君子务实。
独立博客:
23:27 by 虫师, ... 阅读,
三种MPM介绍 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
Apache&2.X&&支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。&
Prefork&MPM&:&这个多路处理模块实现了一个非线程型的、预派生的服务器,它的工作方式类似于。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的,这样若一个请求出现问题就不会影响到其他请求。
这个具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
Worker&MPM&:&此多路处理模块使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的的稳定性。
每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程父进程负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。
不管是Worker模式或是Prefork&模式,Apache总是试图保持一些备用的或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。
Event&MPM:以上两种稳定的方式在非常繁忙的服务器应用下都有些不足。尽管的方式能减少连接数量和网络负载,但是&需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。&Event&MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限&制,此时方式是最有效的。一个以方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而可以用来处理更高负载。值得注意的是,不能在安全()访问下工作。&
对于Event&模式,给出了以下警告:
This&MPM&is&experimental,&so&it&may&or&may¬&work&as&expected&.
这种MPM目前处于试验状态,他可能不能按照预期的那样工作。
如何配置三种MPM & & & & & & & & & & & & & & & & & & & & & & & & & & &&
Prefork&是平台上默认的,它所采用的预派生子进程方式也是中采用的模式。本身并没有使用到线程,版本使用它是为了与版保持兼容性;另一方面,用单独的子进程来处理不同的请示,之程之间是彼此独立的,这也使其成为最稳定的之一&。
如何查看当前安装的的三种。
[root@localhost apache]# httpd -l
Compiled in modules:
http_core.c
如果你看到则表示当前为模式。则表示为&模式。
那么如何设置的呢?
需要的配置安装的时候需要指定模式:
[root@localhost httpd-2.4.1]# ./configure --prefix=/usr/local/apache2worker --enable-so --with-mpm=worker
[root@localhost httpd-2.4.1]# make
[root@localhost httpd-2.4.1]# make install
指定--with-mpm=NAME&选项指定,NAME就是你想使用的的名称。不指定模式的话,默认为Prefork&MPM。&
那么如何配置成Event&MPM?&
同我上面的方法一样,只需要在安装的时候加上以下参数:&--enable-nonportable-atomics=yes&
需要注意的是Event&MPM对于老的CPU可能是不支持的。
三种MPM参数分析 & & & & & & & & & & & & & & & & & & & & & & & & & &
不管你安装的是apache哪种MPM
在安装完成之后打开.../apache/conf/extra/httpd-mpm.conf文件,找到如下配置:
#&perfork&MPM
&IfModule mpm_prefork_module&
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
&/IfModule&
#&StartServers: 数量的服务器进程开始
#&MinSpareServers: 最小数量的服务器进程,保存备用
#&MaxSpareServers: 最大数量的服务器进程,保存备用
#&MaxRequestWorkers: 最大数量的服务器进程允许开始
#&MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
prefork&控制进程在最初建立&StartServers&个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两&个,再等待一秒钟,继续创建四个&&如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式&可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个&值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为&MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。&&
MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了&MaxRequestsPerChild&个请求后将自&动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
1、可防止意外的内存泄&漏。2、在服务器负载下降的时侯会自动减少子进程数。
因此,可根据服务器的负载来调整这个值。
MaxRequestWorkers指令集同时将服务请求的数量上的限制。任何连接尝试在将通常被排队,最多若干基于上ListenBacklog指令。&
在apache2.3.13以前的版本被称为&。
(MaxClients是这些指令中最为重要的一个,设定的是&Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps&-ef|grep&http|wc&-l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以&处理的请求就越多,但Apache默认的限制不能大于256。)
#&worker&MPM&
&IfModule mpm_worker_module&
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
&/IfModule&
#&StartServers: 初始数量的服务器进程开始
#&MinSpareThreads: 最小数量的工作线程,保存备用
#&MaxSpareThreads: 最大数量的工作线程,保存备用
#&ThreadsPerChild: 固定数量的工作线程在每个服务器进程
#&MaxRequestWorkers: 最大数量的工作线程
#&MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
Worker&由主控制进程生成&StartServers&个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,&为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;
而MaxRequestWorkers&设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程&
MinSpareThreads和&MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节&。
ThreadsPerChild是worker&MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用&ThreadLimit指令,它的最大缺省值是20000。&
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild&值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时&也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以&ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则&Apache将会自动调节到一个相应值。
#&event&MPM
&IfModule mpm_event_module&
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
&/IfModule&
#&StartServers:初始数量的服务器进程开始
#&MinSpareThreads: 最小数量的工作线程,保存备用
#&MaxSpareThreads: 最大数量的工作线程,保存备用
#&ThreadsPerChild: 固定数量的工作线程在每个服务器进程
#&MaxRequestWorkers: 最大数量的工作线程
#&MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
本篇内容,会同步更新到新的博客:http://tt-/
转载请注明:虫师网站并发测试,网站服务使用的是apache2.4 因此使用ab来测试网站性能。
windows使用cms 打开apache/bin 运行ab.exe (......../apache/bin/ab),提示出很多参数,大家可以去查看,我就看了n和c其余没注意,
...... ab -n 200-c 100 http://localhost/test.php &&d:**** 测试结果会保持到****文件里。
第一次测试 200请求数 100并发 &结果OK
第二次测试 500请求数 500并发 结果 近2000次fail
很是费解,查资料 需要配置apache的什么&多处理模块& 也就是conf目录下extra下的httpd-mpm.conf文件配置
&IfModule mpm_prefork_module&&StartServers
5&MinSpareServers
5&MaxSpareServers
10&MaxRequestWorkers
250&MaxConnectionsPerChild
0&/IfModule&
&IfModule mpm_prefork_module& ServerLimit
StartServers
MinSpareServers
MaxSpareServers
MaxRequestWorkers
MaxConnectionsPerChild
4000&/IfModule&
StartServers:当Apache被启动时,Apache会自动创建StartServers个进程,MinSpareServers :将空闲进程数保持在MinSpareServers和MaxSpareServers之间。MaxSpareServers :将空闲进程数保持在MinSpareServers和MaxSpareServers之间。
如果空闲进程小于MinSpareServers,Apache将会以大约每秒1个的速度新建进程。如果空闲进程大于MaxSpareServers,Apache将会删除多余的空闲进程,释放服务器资源。进程数的最大值由MaxRequestWorkers&控制,在Apache1.3中最大只能设置为256,但在Apache2.0中,可以通过在配置开头增加ServerLimit项目来突破256的限制,此时必须MaxClients & ServerLimit & 20000MaxConnectionsPerChild&用来控制每个进程在处理了多少次请求之后自动销毁,这个参数可以设置为0表示无限(即不销毁进程)。
重启apache&
现在结果好多了
This is ApacheBench, Version 2.3 &$Revision: 1430300 $&Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking
(be patient)
Server Software:
Apache/2.4.4Server Hostname:
Server Port:
Document Path:
/search/pf/1.htmlDocument Length:
28355 bytes
Concurrency Level:
1000Time taken for tests:
298.971 secondsComplete requests:
5000Failed requests:
(Connect: 3, Receive: 0, Length: 7, Exceptions: 0)Write errors:
0Total transferred:
bytesHTML transferred:
bytesRequests per second:
16.72 [#/sec] (mean)Time per request:
[ms] (mean)Time per request:
59.794 [ms] (mean, across all concurrent requests)Transfer rate:
468.19 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
maxConnect:
1089Processing:
70505Waiting:
69721Total:
Percentage of the requests served within a certain time (ms)
69998 100%
70593 (longest request)
阅读(...) 评论()当前位置: > >
apache的几种工作模式,apache几种模式
本文作者:       更新时间: 9:43:23
apache的几种工作形式,apache几种形式
固然项目中在运用apache服务器,但是都是配了能用或简单调整下参数以便可以承受高并发,并没有认真深化理解;再加上最近apache运用mpm_event形式,发现占用cpu很高,刚开端还以为是apache,php配置的问题,后来修正了下event参数才恢复正常。
下面我们就先来引见下常用的prefork和event形式吧
一个非线程的,预派生的模块,这意味着prefork会运用多个子进程,每个子进程只要一个线程来承受恳求;每个进程只能处置一个http链接,直到这个链接被释放。
ServerLimit
StartServers
MinSpareServers
MaxSpareServers
MaxClients
MaxRequestsPerChild 0
StartServers 5
apache在启动后树立的子进程数,prefork默许为5
MinSpareServers 5
最小闲暇进程数,默许为5。当闲暇子进程数小于5时,那么apache将会立即生成新的子进程。
MaxSpareServers 10
最大闲暇进程数,默许为10。当闲暇子进程数超越10时,那么父进程会杀死多余的子进程,当我们的网站负载过大,能够恰当加大MinSpareServers和MaxSpareServers
MaxClients 1000
apache所能承受的http恳求数。当恳求超越1000时,多余的恳求会进入恳求队列,直到前面的恳求处置完。当我们的服务器剩余资源很多但访问很慢时,我们就要看看这个参数是不是设置太低。当然Maxclients默许值为256,当要增大此值时,也要增加serverlimit,但是serverlimit最大为20000。
apache2.3.1以后的版本MaxClients称为MaxRequestWorkers
MaxRequestPerChild 1000
每个子进程所能承受的最大恳求数,当超越1000时会自动销毁,0表示子进程永不销毁,固然可以承受更多的恳求,但可能会形成内存走漏。
prefork和mpm方式在十分忙碌的服务器应用下都有些缺乏。虽然HTTP的Keepalive方式能减少TCP衔接数量和网络负载,但是 Keepalive需求和服务进程或者线程绑定,
这就招致一个忙碌的服务器会耗光一切的线程。 Event MPM是处理这个问题的一种新模型,它把服务进程从衔接中别离出来。在服务器处置速度很快,同时具有十分高的点击
率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的忙碌服务器可以接受每秒好几万次的访问量(例如在大型新闻
服务站点的顶峰时),而Event MPM能够用来处置更高负载。值得留意的是,Event MPM不能在平安HTTP(HTTPS)访问下工作。
event和work有相同之处,都是经过线程来处置恳求;一个父进程树立多个子进程,而子进程又会树立多个线程。
ServerLimit
StartServers
MinSpareThreads
MaxSpareThreads
ThreadsPerChild
MaxRequestWorkers
MaxConnectionsPerChild
StartServers 20
apache启动后树立20个子进程,由于默许的Serverlimit 为16,当我们StartServers大于16时,会报错“changing ServerLimit to 1000 from original value of 16 not allowed&
during restart”,但是我们能够经过Serverlimit来重新设置,不过需求先中止apache服务再启动,直接restart无效。
MinSpareThreads 25
最小闲暇线程数
MaxSpareThreads 1200
最大闲暇线程数,这里要留意这个值必需要大于StartServers*ThreadsPerChild=20*50=1000,如若我们MaxSpareThreads 800,小于1000,则
StartServers-MaxSpareThreads/50=4,则有4个进程会被杀掉,我们能够经过top查看,restart后会生成多个进程,当过一会多余的进程会被kill掉
ThreadsPerChild 50
每个进程能够生成50个线程,这里要留意的是默许的ThreadLimit为64,当我们ThreadsPerChild大于64时,会报错“ThreadsPerChild of 500 exceeds ThreadLimit of 64,&
decreasing to match”,但是我们能够经过ThreadLimit来重新设置,不过需求先中止apache服务再启动,直接restart无效。
MaxRequestWorkers 2000
最大数量的工作线程,等于ServerLimit*ThreadPerChild,假如依照默许的ServerLimit=16的话,,日志中会报错“MaxRequestWorkers of 1000 would require 20&
servers and exceed ServerLimit of 16, decreasing to 800”,这时我们需求经过修正ServerLimit,需求先中止apache服务再启动,直接restart无效。
MaxConnectionsPerChild 1000
每个进程所能树立的最大衔接数
ps:由于prefork和event是我们常用到的,我就依照本人平常遇到过的问题把参数重新理解了,看来还是根本功不扎实啊。
对了,我们能够经过以上命令来查看httpd到底用了什么形式:
[ apache]$ /usr/local/apache/bin/httpd -l
Compiled in modules:
http_core.c
点击次数:  更新时间: 9:43:23  【】  【】
上一条:  下一条:没有了!python multiprocessing with maxtasksperchild - Stack Overflow
to customize your list.
Announcing Stack Overflow Documentation
We started with Q&A. Technical documentation is next, and we need your help.
Whether you're a beginner or an experienced developer, you can contribute.
EDIT: I confirmed this to be bug in Python. It is bug
(I filed a new bug, in response to which the maintainer pointed me to 10332). I copied the multiprocessing directory from Python source repo into my project directory, and the testcase works properly now.
This seemingly-simple program isn't working for me unless I remove the maxtasksperchild parameter. What am I doing wrong?
from multiprocessing import Pool
import sys
print "pid: ", os.getpid(), " got: ", x
sys.stdout.flush()
return [x, x+1]
def cb(r):
print "got result: ", r
if __name__ == '__main__':
pool = Pool(processes=1, maxtasksperchild=9)
keys = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = pool.map_async(f, keys, chunksize=1, callback=cb)
pool.close()
pool.join()
When I run it, I get:
$ python doit.py
And it hangs. That is, the new worker to process the 10th element didn't get spawned.
In another terminal, I see:
$ ps -C python
6408 pts/11
00:00:00 python
6409 pts/11
00:00:00 python &defunct&
This is done on Ubuntu 11.10 running python 2.7.2+ (installed from ubuntu packages).
I never used multithreading in python, but I guess you want to make maxtasksperchild = 10 on this line: pool = Pool(processes=1, maxtasksperchild=9) and the output after that change is:
got result:
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9], [9, 10], [10, 11]]
1,85311738
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabled