maxconnectionsperchild 冰箱调到什么档合适多少合适

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&not&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

我要回帖

更多关于 maxrequestperchild 的文章

 

随机推荐