虽然现在已经00:22了,但是还是抑制不住内心的激动,因为解决了好几天以来一直困惑我的问题——服务器【qì】httpd服务一直在吃内存,只【zhī】要有【yǒu】人访问,服务器【qì】的内存就【jiù】会【huì】小一点,慢【màn】慢的就【jiù】会被吃掉【diào】所【suǒ】有内存,经过几【jǐ】天的研究,最【zuì】终【zhōng】确定为内【nèi】存泄漏问题,因【yīn】为服务【wù】器的内存本【běn】身就笑,而Apache的默认【rèn】配置对小内【nèi】存服务【wù】器还是有些不兼容的,比【bǐ】如我【wǒ】遇到【dào】的【de】这个内【nèi】存泄【xiè】漏。下面就分【fèn】析一下这个【gè】问题。
当然,遇到这种【zhǒng】问【wèn】题,第一【yī】时间就是去google上看看有没有【yǒu】类似的问题,结果还真【zhēn】的有,很【hěn】多站长遇到【dào】了跟我相同的问题。回答也【yě】都各【gè】有千【qiān】秋,我都照着配【pèi】置了一遍进行了【le】测试,但【dàn】是结果并不【bú】尽人意,反而【ér】也来越糟【zāo】。
最【zuì】后【hòu】,在【zài】某一篇【piān】文章上看到了还不错的解决方案。然而【ér】好像大部【bù】分的回答都起【qǐ】了反作用。
在Apache的配置文件中找到以下配置
1 2 3 4 5 6 7 8 9 | [cce_xml] <IfModule prefork.c> StartServers 8 #数量的服务器进程开始 MinSpareServers 5 #最小数量的服务器进程,保存备用 MaxSpareServers 20 #最大数量的服务器进程,保存备用 ServerLimit 256 #进程的线程数 MaxClients 256 #最大请求并发数,同上值相等即可 MaxRequestsPerChild 30 #最大子进程请求数 </IfModule> |
1 2 3 4 5 6 7 8 9 | [cce_xml] <IfModule worker.c> StartServers 2 MaxClients 500 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 30 </IfModule> |
参数介绍:startServers是【shì】当【dāng】apache开启的时候创建的进【jìn】程数【shù】,MinSpareThreads是最小【xiǎo】的空闲进程【chéng】数【shù】,MaxSpareThreads是最大的空闲【xián】进程数,apache会【huì】努力的将空闲进程保存在这两者【zhě】之间,ServerLimit是【shì】最大限制的【de】请求并发数,用来限制MaxClients,只要【yào】不超过这【zhè】个数值即可,MaxRequestPerChild是最大子进【jìn】程请求数,当进程请求数达到【dào】这个数值之后就apache就会销【xiāo】毁该进【jìn】程。
红色字【zì】体【tǐ】部分【fèn】是【shì】重点,网上【shàng】好多地方说【shuō】可以设置的大【dà】一点,但【dàn】是【shì】我测【cè】试过了,设置在1000+之后服务内存反而消【xiāo】耗的更快,所以在【zài】小内存【cún】服务器上最好设置【zhì】为【wéi】9-22之间,当【dāng】然,如果【guǒ】是牛逼的服务器完全不用考虑这【zhè】一点,设置为0或者1000+都【dōu】可以,但是不建议设置为【wéi】0,如果设置为【wéi】0则代表不释放线程内存,因为【wéi】不知道apache啥时候可能出现内存泄【xiè】漏,所以还是【shì】不要设置为0。
亲【qīn】自测试过了。这种配置完全可【kě】以解决httpd一直消【xiāo】耗内【nèi】存的问题。
版权所有:深圳市网商在线科技有限公司
友情链接: