哪里可能是php中的内存泄漏以及如何调查它?

时间:2014-04-10 08:26:27

标签: php codeigniter memory-leaks

我正在使用Codeigniter框架(来自github的开发版本)来完成我的一个项目。项目本身并不大,只有少数控制器和模型,我有内存泄漏。在12个小时内,我的公羊不断上升,我必须重新启动php5-fpm来清理它们。我应该从哪里开始寻找内存泄漏?我的意思是它是循环还是变量,我可以使用哪些工具进行调查?

3 个答案:

答案 0 :(得分:8)

一个非常古老的问题,但对于那些面临这个问题的人(因为对于我们中的一些人来说,使用CodeIgniter仍然是一个问题)...根据开发人员:By default, CodeIgniter keeps an array containing your history of queries.

查看数据库配置中的setting save_queries to false

我在工作项目中遇到了同样的问题,这大大减少了我们的内存使用量。

答案 1 :(得分:1)

如果您需要找到内存泄漏的确切原因,我建议您使用XHProf等内存分析器。

这是调试php脚本的最佳方法,以及内存泄漏的原因是什么。

答案 2 :(得分:1)

留意:

1)Cron工作

2)查询使用'*'和

3)使用没有INDEXES的表的查询。

4)特别是长期未经优化的查询。例如,它们是具有许多子选择的查询。

5)使用EXPLAIN语句运行这些查询,并找出应优化的表。在这里阅读如何使用说明:Using explain

您应该在服务器/应用程序上安装类似New Relic的内容,它有一个免费的分层模式,可以帮助您找到长查询和进程。

现在,我假设你没有'你正在做的任何重大处理,并没有告诉我们,例如,长图像处理列表。

如果未经优化,可能会杀死一台机器的野兽。

请记住,长循环也可能是内存泄漏。如果是这种情况,您可以尝试从foreach循环切换for循环,例如。