ThinkPHP3.2 执行脚本时,占用内存越来越大

      最近同事在使用TP写脚本时,发现老是内存不足。在没有增加变量时,随着进程执行的时间变长,占用的内存空间明显增加。尤其是用for循环去访问数据库时。

    通常大家一遇到内存不足,就会考虑增加进程最大使用内存,例如用 ini_set('memory_limit', '10000...M')设置内存上限。

     当仔细分析代码后仍然无法发现问题时,就要考虑是不是TP哪里出了问题。

     ThinkPHP一个进程执行的过程中, 运行到某个切面时会触发记录日志(调用Log.class.php中的record方法), 在记录系统日志的时,ThinkPHP先是给所有日志信息记录在内存里(Log.class.php 中的$Log变量数组),最后一次性写入文件,这样做的目的主要是减少open file的次数,提高写Log的效率。当系统日志信息积累过多时,进程占用的内存空间就会越来越大了。

测试代码如下:

通过测试,可以发现内存空间明显地线性增加:

修改record方法,定期100条批量保存一次日志到磁盘,同时释放Log

修改record方法后,效果十分明显。(目前TP5据说就是这么修改的)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章