PHP脚本似乎无法正确释放内存,可能是由于数据库交互

PHP脚本似乎无法正确释放内存,可能是由于数据库交互,php,database,memory,memory-management,Php,Database,Memory,Memory Management,我有一个用PHP编写的非常复杂的脚本,它读取大量CSV文件并将内容导入数据库。在某些地方,我不是直接通过INSERT语句而是通过对象来实现这一点 我的问题是top(脚本在ubuntu 10.04和PHP 5.3.2上运行)显示了apache2进程消耗数GB内存,而内存使用率(true)将保持在250 MB左右。我开始调用gc_collect_cycles(),它表示有时会收集超过100000个周期,但消耗的内存仍然没有减少。在离开函数作用域之前,我开始取消设置变量 有没有一种方法可以追踪大量内存

我有一个用PHP编写的非常复杂的脚本,它读取大量CSV文件并将内容导入数据库。在某些地方,我不是直接通过INSERT语句而是通过对象来实现这一点

我的问题是top(脚本在ubuntu 10.04和PHP 5.3.2上运行)显示了apache2进程消耗数GB内存,而内存使用率(true)将保持在250 MB左右。我开始调用gc_collect_cycles(),它表示有时会收集超过100000个周期,但消耗的内存仍然没有减少。在离开函数作用域之前,我开始取消设置变量

有没有一种方法可以追踪大量内存使用的原因,更重要的是有没有一种方法可以修复它?

您是否尝试过使用它


我以前使用过它来查看资源消耗情况,您通常可以很快看到哪些呼叫成本最高。处理大型应用程序的输出可能需要一些时间,但可能是值得的。

您是否尝试过在每次加载完文件后释放变量?将PHP版本从不存在的6改为5:-)@MelvinProtacio是。我对所有未在more then on循环或类似循环中使用的变量调用unset。结果集如何?和文件变量?更可能的是,罪魁祸首是打开文件时分配的内存。当您从mysql查询中获得结果并打开文件时,您可能没有释放正在生成的资源。@MelvinProtacio很可能是结果集。。。我必须在现有应用程序的范围内工作,该应用程序抽象db调用以与多个引擎一起工作。很可能结果没有被释放。。。但是离开函数作用域或破坏调用对象不应该导致结果自由吗?