apache服务器性能研究
从网页上查了一个计算公式,主要是设置不知道正确与否:
连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。 计算httpd占用内存的平均数: 由于基本都是静态页面,CPU消耗很低,每进程占用内存也不算多,大约200K。 服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩1.5G可用,那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368 约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅) |
这个数据不知道是怎么算的,假如服务器内存定位4G,则计算公式应该就改为:3.5*1024*1024*1024/200000 =18790.48192(不知道这个值是否成立)
如果以上值成立的话,基本上满足我们的要求了。
目前apache的主流工作模式MPM模式。MPM是Multi-Processing-Modules的简称,意思是多道处理模块。MPM模块有不同的种类。现在用的比较多的MPM种类主要是prefork和worker:
apache有关并发控制主要是prefork和worker二个其中一个来控制。prefork的工作方式是多个进程工作,每个进程会在处理一定数量的请求后结束(这个数量可能是无穷),没有线程的概念。
worker被看作apache未来的主流工作模式,它是一种多进程与多线程混合的模式。
Prefork模式:
默认值:
<IfModulempm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
#有这个参数就不必像apache1一样修改源码才能修改256客户数的限制,听讲要放到最前面才会生效,20000是这个参数的最大值
ServerLimit 20000
#指定服务器启动时建立的子进程数量,prefork默认为5。
StartServers 25
#指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
MinSpareServers 25
#设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。
MaxSpareServers 50
#限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。
MaxClients 2000
#每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
MaxRequestsPerChild 10000
这篇是结合网络上文章做得整理,只做了部分验证,仅供参考!如果需要请联系我!
参考文章:
1、 apache并发数调整:http://blog.csdn.net/nich262/article/details/4069078
2、 apache的参数设置:
http://hi.baidu.com/thinkinginlamp/blog/item/6f969f3d8965d601bba1676f.html
http://bbs.chinaunix.net/viewthread.php?tid=544063
4、 如何避免apache的httpd进程占用比较多的内存:
http://hi.baidu.com/acquiesce/blog/item/6875e710821115ffc2ce7961.html?