Compiled in modules:

core.c

prefork.c

apachephp优化详解Apache 并发优化设置办法 Node.js

http_core.c

mod_so.c

这里可以看到运行模式是prefork模式。

2、修正apache 的httpd.conf 配置

本文是对512M 内存并装有apache的vps进行优化,请不要跟我说装nginx就强多了,确实如此,但是你这样说的话,这篇文章就没什么意义了,哈哈。
那么进入正题吧!

操作系统(linux):CentOS 5.5 32位(并不是我说这个比较好,只是Cents我用得比较闇练)

内存:512M

cpu:1G(1000MHz,vps实际有没有这个数,很难说)

apache:2.2(建议低版本的,升级到高版本,毕竟旧版有很多问题,且性能也是高版本好点)

运行的紧张是PHP程序,其他的不多说了,与本文关系不大。

首先,如题所说,本文所说的优化是针对apache 2.2以上版本,及利用perfork MPM模式的。
perfork是apache在linux下默认安装下的模式,如果利用apache作为做事器的放在,还是利用perfork模式比较好,worker模式下对php某些功能并不支持。
如果你利用的是win系统或都没有使有和perfork,那么下面可以选择不看或抱着学习的态度看看咯。

以下内容均属于博主自己的见地,实际测试请根据你的做事器,程序及其他成分按需处理。

一样平常情形下,我们须要优化apache便是由于apache占用大量的内存,导致vps当机,由于perfork是多进程处理的,每个进程都会点用一定的内存数量。
以是限定httpd进程的数量,从而达到优化apache的浸染。
影响单个httpd进程的内存大小,紧张都是加载模块,至少什么模块是得当的,我也很难说,由于这个是按由你的须要而定的。
网上有些人说,绝大部分都会用不上的模块列出来,我认为这个是有很大的误导浸染,由于绝大部分人中,大概你便是个中一个。
将有用的模块屏蔽掉,最坏的情形,便是重启apache出错,或部分功能无法利用。
以是我也不会列出什么最少模块加载方案什么的。
以是,我只会说出一些参考。

apache(perfork)下的模块加载,并不是模块加载列表,没有的模块并不是屏蔽掉了,只是我也不清楚它的实际浸染。

(一)、对付apache2.2,模块名有cache的一样平常都是有用的,由于有不少的这类模板都是2.1以上的apache才支持的,以是这类的模块不会是无缘无缘而存在的。

(二)、很有可能或必用到的模块有:

(三)、我粗略点了一下apache里面的模块约在50+以,要从中选择大家都适用的模块加载列表是不可能的,至少cgi模块我是不会用,但不用除你不会用。

模块加载这一块就说到这里,这个大家多百度,多用自然会识别出一些有用模块并逐渐屏蔽不该用的模块。

接下来,便是最为主要的perfork配置,也是困扰了我良久的问题,只管参数就那么6个,那是却足以让你的vps当机。
先列出须要修正的参数,修正位于httpd.conf的文件里面

上面的代码便是要修正的,实际上我们是要修正perfork里在的参数,之以是将Timeout,KeepAlive等也写出来,是由于这个也是影响apache性能的。

Timeout是一个连接多少韶光后断开,这个参数设置在30-60是一样平常的php程序都是适用的,至少要运行一些要占用大量韶光的php程序,那么适当调高也是可以的,但请不要太高,否则会影响apache性能,本次优化我们利用30就很足够了。

MaxKeepAliveRequests 是一个连接最大的要求量,对付页面有较多的图片等元素,可以适当调高一点,对付一样平常的网页设置在80-120是足够的,我们就设置为100,如果设置太高会导致httpd永劫光不能退出开释内存的。

KeepAliveTimeout 是当用户处理一次连接时,如果在该参数的韶光内还有要求则会连续实行,不须要重新创建新的连接,直到达到MaxKeepAliveRequests的最大值才会退出。
对付perfork模式下的,有人认为是将KeepAlive Off会比较好,但是对付绝大多数的网站都会不多不少有些图片元素,以是将该项打开,并将KeepTimeOut设置在2-5秒,不但有效提高做事器性能,也能加快页面打开速率。

接下来,便是正式进入perfork的参数设置了,不想做事器运行一会就内存占满的得看看哦。

首先是参数ServerLimit便是做事器最大支持同时连接的客户端,该值将决定下面参数MaxClient可以设定的值的范围。
ServerLimit实际上只是起到一个限定的浸染,并没有实际有浸染,大概有,我就不知道了。
实际上起到浸染的是,MaxClient参数,但这个值又受ServerLimit的限定,等下会讲。

另三个参数StartServers,MinSpareServers,MaxSpareServers,为什么将这三个参数一起说呢,由于这三个数是联系在一起的。
这三个数都是决定空闲进程数量,StartServers该当范围便是MinSpareServers和MaxSpareServers之间。
否则,apache会自动将该值还原到两都之间,以是不要摧残浪费蹂躏不必要的资源。
按照perfork默认的配置,这三个参数分别为:5,5,10。
但是对付只有512M内存的vps来说,我认为还是有过大的负载。
因此,我认为在这里该当退一步,将这三个参数设置为4,4,10,看起来和上面5,5,10并没有什么不同,最大值还是10,但在实际利用中4,4,10开释的内存速率会明显比5,5,10快很多。

接下来便是MaxClient最大支持多少客户端在同一韶光连接做事器,大略说便是最大并发数支持,这个没有特殊须要说的。
对付512M的vps你也别想你的站能承受百万PV,利用默认的150已是超出负载的了。
一样平常将ServerLimit和MaxClient设为一样值即可。

末了便是MaxRequestsPerChild参数,一个进程在处理多少次之退却撤退出,设置为0则是无限次,也便是说不会退出,那么httpd进程也不会退出。
那么,你就等着你的vps当机重启去吧。
对付这个参数,我粗略地搜索了一下,不少人推举在1000次,也有100次的。
据我的测试,对付内存只有512M的vps来说,该值设置在500以上都会很快占满内存,但不至少于当机。
而不雅观察得知,一但内存占满,cpu的利用率险些变为0了。
由此可知,当机了那什么都干不明晰,还不如花费多一点cpu资源避免,提高稳定性。
以是,我末了的决定是将该值定义在30-40之间。
这样设定后,可以看出,内存开释速率得到很大的提升,但也可以看到cpu也在频繁高下跳动。
这样设置,纵然内存占满,也能在最短韶光规复正常。

以是对付512MB的vps,apache(perfork模式)末了的优方配置为:

这样,我们的配置基本完成,进行负载测试即可。
负载测试,我们利用ab测试,先声明一点,是用你本地的虚拟机去测试做事器上的一个静态页面,而不是在做事器上测试。
之前,我便是这样做,由于网速一样,效果都是比较好的,但别人都是不同网速的,以是做事器上测试是不准确的。

3、现在看看须要怎么优化:

连接数理论上是越大越好,但是得根据硬件,做事器的CPU,内存,带宽等成分,查看当前的apache连接数:

ps aux | grep httpd | wc -l

打算httpd 占用内存的均匀数:

ps aux | grep -v grep |awk '/httpd/{sum += $6;n++};END{print sum/n}'

这个只是做个参考。
打算后要减去做事器系统本身所须要的资源。

比如内存2G,减去500M留给做事器,还有1.5G,那么可得到最大连接数:在8000旁边。

根据情形修正后的httpd.conf的prefork的配置后为:

这里重点先容下ServerLimit,必须放到MaxClients前,值要大于MaxClients。

4 、重启apache,再打开网站看看是否还会有慢的问题了。

附注:可以利用以下命令找到httpd.conf文件

find / -name httpd.conf

以上便是本文所有内容,希望对大家有所帮助,如果大家有任何疑问请给我留言,