首页 > 精华文章, 编程学习记录 > WDCP内存优化相关的设置

201701月16

WDCP内存优化相关的设置

作者:admin 0 Comments 发表评论

今天折腾了很久,就在研究怎么优化WDCP的内存。原因是买的小内存的vps总是担心内存不足,在后台看到1G的内存,很快就实际占用了好几百M左右。如果放多个网站,岂不是马上就内存不足了。在前面的文章中实际上也是担心VPS内存不足的问题:http://www.mianfeidianhua.net/wdcp-duozhan.html

虽然搞清楚了建立一个新的网站就要占用更多的内存和进程,但是还是不明白怎么进行优化。于是在度娘上找到,看到很多相关的资料,优化的关键与HTTPD进程的多少有关系,而这个东西又与下面几个量有关系:

ServerLimit 、StartServers、MinSpareServers 、MaxSpareServers 、MaxClients、MaxRequestsPerChild

这几个量的相关解释,我看了很多篇文章,但是没有一篇讲的透彻清楚的。

先来看一个比较有代表性的解释:

ServerLimit 最大客户数
StartServers 服务器启动时建立的子进程数量
MinSpareServers 最小空闲子进程数
MaxSpareServers 最大空闲子进程数
MaxClients 同一时间客户端最大接入请求的数量
MaxRequestsPerChild 每个子进程在其生存期内允许伺服的最大请求数量

类似上面的这种解释很多,但是都说的不够清晰。看了几个小时的网上资料,还是理解的很模糊,下面把我自己的理解记录下来:

1,StartServers 服务器启动时建立的HTTPD进程数量,这个应该属于父进程

2,MinSpareServers 最小HTTPD空闲进程数量,这个虽然是空闲的父进程,但是它是有作用的,它的存在能够减少请求突然到来时,HTTPD进程数量不够,产生新的HTTPD进程的时间。

3,MaxSpareServers 最大HTTPD空闲进程数量,这个用来控制,如果空闲HTTPD进程太多,会占用掉大量内存空间。

4,MaxClients 这个参量最难理解,我个人理解是,每个访客访问网站时,网站的HTTPD进程用来处理和访客的交互操作,而每个HTTPD的大小每个网站应该是有所区别的。这个MaxClients就代表了网站的HTTPD父进程的最大数量。比如每个HTTPD占用20M内存空间,你VPS的剩余内存空间是200M(剩余空间是指总的内存减去系统以及其它服务已经占用的内存),那么你的MaxClients应该只有200M/20M=10个。此时你最多只能设置为10,如果超过,那么VPS会调用硬盘空间作为内存不足的补充部分,但硬盘空间的访问速度实际上是很慢的,这样网站访问起来,就会有部分用户感觉很慢。如果你这个数值设置的很小,也会有问题,比如本来要10个HTTPD才能满足需求,但你设置为了8,那么如果有10人访问,就会有后面的2人访问会比较慢,等到前面的8人链接断开,这2人的访问才会快。(这里理解不清楚,不明白访客访问与HTTPD父进程和子进程之间的关系

5,MaxRequestsPerChild 每个子进程在其生存期内允许伺服的最大请求数量,默认为0,则子进程不会自动销毁,这样子进程就可能占用内存越来越多,如果设置为1000,那么子进程在处理了1000个请求的时候会 被父进程自动销毁,从而产生新的子进程,这样内存消耗就降低了。(跟上面一样,不明白访客访问与HTTPD父进程和子进程之间的关系),但这里我也不明白怎么看子进程,还有子进程处理请求到底是处理的什么?

虽然不太明白上面这些参量的意思,但是减小内存消耗确实知道怎么去控制了,比如我修改成这个样子时,内存消耗就比较大:

<IfModule mpm_prefork_module>
ServerLimit 128
StartServers 5
MinSpareServers 18
MaxSpareServers 30
MaxClients 128
MaxRequestsPerChild 1000
</IfModule>

原因是,我设置了最小空闲HTTPD进程为18个,这样的话,就算没有人访问,最少也要18个空闲HTTPD进程在等待状态。如果你网站没什么流量,设置这么多的空闲HTTPD进程就完全是浪费,此时查看后台的实际内存占用情况,如图所示:

实际内存占用截图

而如果设置成下面这个样子,内存消耗就要小的多:

<IfModule mpm_prefork_module>
ServerLimit 128
StartServers 5
MinSpareServers 5
MaxSpareServers 6
MaxClients 128
MaxRequestsPerChild 1000
</IfModule>

后台实测在200M左右:

内存占用截图

原因很简单,你设置的空闲HTTPD进程只有5个了,最多是6个,空闲HTTPD进程相差10多个,而上面两幅图都是在访客差不多的情况下截图的,访客产生的HTTPD进程应该是差不多的。这样就能减小后台的内存占用,不过如果短时间内流量暴涨,新的HTTPD进程只能一个个的产生,这样会降低访问速度。具体怎么样,可以自己测试,也可以查看蜘蛛的抓取记录平均耗时来了解端倪。

而至于HTTPD是在什么样的情况下产生,什么样的情况下消失,我则弄不清楚了。

推荐阅读相关文章:精华文章 编程学习记录

本文地址:http://www.mianfeidianhua.net/wdcp-neicunyouhua.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论