可能很多朋友都不会去管理自己apache服务器需要内存多少,最大并发数是多少,下面介绍一下怎么去估算apahce并发数与所需内存吧。 Apache的并发数估算 Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原 因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。 例子1: 一个apache + mod_php的服务器:一个apache进程一般需要4M内存,因此在一个1G内存的机器上:
所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。 例子2: 一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存,在一个2G内存的机器上:
以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。 估算Apache所需要的内存 精确的计算所需要的内存是很困难的,为了尽可能的精确,需要观察类似线上环境下观察服务器的负载和进程。毕竟如果不同的服务器配置和装的模块是有差异的,只有查看自己才可靠,所谓核心的东西要掌握在自己手里大概如此。 一个简单可靠的法子是,在压力测试时,找到httpd进程,查看一个进程使用了多少的内存,然后看看总的进程,即可估算一下,比如: ps aux | grep httpd 查看每个httpd进程使用了多少内存,数字在第四列,格式为百分之几。 ps aux | grep httpd | wc -l 得到一共有多少进程,记得结果要减1,因为grep httpd也在结果中。 free 查看服务器内存总量,单位为K 然后就可以估算了。比如一个进程占2%的内存,有27个httpd,总内存为4148424。那就是: php -r "echo 0.002*4148424*26/1024;" 结果为210.66215625M内存,这个只仅仅是为apache分配的。还得给其它服务留出足够空余的内存。而且考虑高峰期可能会比平时大12倍,这个时候仅仅考虑Apache就够了,嘿嘿。曾经出现过因磁盘IO过高导致服务器崩溃的场景。 如果怎么算都不能让服务器有空余的内存,就得考虑限制最大进程数了。使用MaxClient指令可以用来限制。 (责任编辑:最模板) |