免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4072 | 回复: 1
打印 上一主题 下一主题

[转]FastCGI模式下PHP占用大量内存的解决办法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-14 19:42 |只看该作者 |倒序浏览
[转]FastCGI模式下PHP占用大量内存的解决办法



原文【https://guangxin.name/plink/tech/php/2010/344.html

很长一段时间以来,我注意到工作在FastCGI模式下的PHP会占用越来越多的内存,而且似乎从不释放。起初我以为这是内存泄漏的问题,但是各个PHP社区的人好像并没有把这个当作问题。我搜索了一下,发现还有不少人面临同样的问题。来自PHP官方的一个比较正式的解释是:php-cgi进程并没有内存泄漏,php-cgi会在每个请求结束的时候回收脚本使用的全部内存,但是并不会释放给操作系统,而是继续持有以应对下一次PHP请求。这样做大概是为了减少内存碎片化或者解决从系统申请内存之后又释放回操作系统所需要的时间不可控问题。可是如果偶然一次PHP请求使用了诸如ftp或者zlib这样的大内存操作,那么将导致一大块系统内存被php-cgi持续占有,不能被利用。

解决这个问题的办法是在web服务器配置中降低PHP_FCGI_MAX_REQUESTS的值。这个参数决定了一个php-cgi进程被创建出来之后,最多接受的PHP请求数,在lighttpd中默认配置是10000。也就是说这个php-cgi进程每接受10000次PHP请求后会终止,释放所有内存,并重新被管理进程启动。如果把它降低,比如改成100,那么php-cgi重启的周期会大大缩短,偶然的高内存操作造成的问题影响时间也会缩短。

另一个办法则是写一个crontab脚本,定时发现高内存占用的php-cgi进程并向它传送kill指令。

我按照robbin配置的ruby on rails也发现了这个问题,起了10个进程,本来就不富裕的系统内存就没了,搞的服务器嗷嗷卡。现在将进程数降为5个,以观后效。

论坛徽章:
0
2 [报告]
发表于 2012-02-04 15:59 |只看该作者
我碰到了这个问题,最终问题还是找到了,出在好资源的查询上。
如果不解决好资源查询的问题,iis再怎么设置,也是不完美的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP