9月 262008
 

我在一个行业应用软件中,因为业务需求(监控页面)使用ajax定时刷新技术,由于该页面长期运行,导致内存暴增,3天apache.exe,就占用近2G,通过google和百度的搜索,发现影响apache内存性能的主要有一下几个参数:

ThreadsPerChild
MaxRequestsPerChild
————-
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout

参数简单介绍如下:

ThreadsPerChild:

这个指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。如果使用一个类似于mpm_winnt只有一个子进程的MPM,这个数值要足够大,以便可以处理可能的请求高峰。如果使用一个类似于worker有多个子进程的MPM,每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。

MaxRequestsPerChild:

这个参数是说,apache进程在处理了多少个请求之后,必须退出,重新开始,以免在处理中的内存问题。

对于php脚本来说,把这个参数设置的小一些是有好处的,可以避免程序使用的内存持续增长对apache带来的压力:让这个参数定期释放内存,因为php是在脚本执行完毕后,自动释放只用的资源(内存)的。

根据资料建议,可以设置MaxRequestsPerChild来达到内存自动释放的目的,比如设置ThreadsPerChild 250,MaxRequestsPerChild为50?如果太小的话,重新产生一个apache进程也是要消耗资源的,这是一个平衡问题。

keepAlive:

KeepAlive 配置指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接,如果 KeepAlive 设置为On,那么用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这一次 TCP 连接中完成,而不用重复建立新的 TCP 连接和关闭TCP 连接,可以提高用户访问速度。所以打开keepAlive时,请根据自己页面的访问量、页面数据类型来设置MaxKeepAliveRequests和KeepAliveTimeout。尤其是KeepAliveTimeout,根据你页面内包含的内联的.js和图片,设置适当大小。如果内联文件较多,建议设置MaxKeepAliveRequests和KeepAliveTimeout都大一些,如果大部分内容都在一个页面里,设置小一些可能性能更好。

通过修改以上几个参数,apache内存不在暴涨了,呵呵,我设置ThreadsPerChild 250,MaxRequestsPerChild 50,MaxKeepAliveRequests 50,KeepAliveTimeout 5 ,现在页面连开几天都没有暴涨情况了。

目前,正在配置我个人的服务器,以后会陆续发几篇freebsd+apache+php+mysql的配置文章,开始做自己的行业网站sosofun.cn。化工商务网 hg35.com 和 中国大枣网 dazao.net。申请落伍,往管理员批准!

 回复

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>