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