设置内存GC提高IIS+PHP运行稳定性

IIS配置php提供web服务. 短期访问正常,长时间高压力访问容易崩溃.表现为IIS提示500错误,php-cgi.exe崩溃. 此时在php日志中看不到任何异常,但windows事件日志记录下了php-cgi.exe应用程序错误. 其原因和php内存管理有关.有以下改善方法 1. 服务器配置足够物理内存.根据任务管理器界面的物理内存数据,保留更多的空闲物理内存给php-cgi.exe使用. 避免总内存占用超过物理内存. 2. 给php-cgi.exe配置足够内存.php内存回收机制决定了达到一半的内存占用时就会运行gc. 频繁的gc造成php崩溃(windows版php的bug)
;根据实际情况可以改大些. 最好超过实际占用值的两倍以上(任务管理器可以查看php-cgi进程得知实际占用值)
memory_limit = 128M
程序中如下代码,效果和更改php.ini相同.
ini_set('memory_limit','128M');
3. fastcgi配置请求超过一定数量(例如1000) 就重启进程.
       MaxInstances=64   #根据内存和CPU情况配置最大php-cgi.exe进程数. 不要服务器压力过大.
       InstanceMaxRequests=1000  #每处理1000个请求则重启实例. 
       EnvironmentVars=PHP_FCGI_MAX_REQUESTS:1000 #同上
如果64/1000还不行,可以配置更少 4.减少请求处理内存占用和处理时长.优化PHP代码,提高程序性能和减少内存占用。比如使用php完成采集任务时避免一次采集过多内容(那样会占用大量的内存和单次cpu处理时间). 5. 可以考虑在php处理过程中关闭gc.虽然关闭gc会造成php内存占用增大,但可以避免频繁运行gc造成php-cgi.exe崩溃.
gc_collect_cycles();
gc_disable();
....php业务代码.
gc_enable();
以上方法可以极大的改善windows版php的运行稳定性. 总结就是以下几点:1. 不要让PHP服务器满负荷运行.2. 尽可能减少PHP引擎的内存回收次数(通过优化代码降低内存占用或关闭gc实现)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值