Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP脚本内存泄漏,直至最终溢出_Php_Memory - Fatal编程技术网

PHP脚本内存泄漏,直至最终溢出

PHP脚本内存泄漏,直至最终溢出,php,memory,Php,Memory,在PHP脚本中不断遇到奇怪的问题。该脚本的思想是从一个MySQL表中获取一组数据,对其进行处理,将其与另一个表中的数据进行比较,并将结果以CSV格式打印到一个文件中 此脚本将运行数十万次迭代来完成。我的问题是,即使在数组中使用unset(),在MySQL查询中使用free(),内存仍然会被占用,直到大约350000次迭代时内存耗尽 毫无疑问,每次运行脚本时,memory_get_usage()报告的内存分配都保持不变,直到大约1050次迭代。然后它将增加262144字节。通过测试,它也总是在脚本

在PHP脚本中不断遇到奇怪的问题。该脚本的思想是从一个MySQL表中获取一组数据,对其进行处理,将其与另一个表中的数据进行比较,并将结果以CSV格式打印到一个文件中

此脚本将运行数十万次迭代来完成。我的问题是,即使在数组中使用unset(),在MySQL查询中使用free(),内存仍然会被占用,直到大约350000次迭代时内存耗尽

毫无疑问,每次运行脚本时,memory_get_usage()报告的内存分配都保持不变,直到大约1050次迭代。然后它将增加262144字节。通过测试,它也总是在脚本中完全相同的位置递增。在下面的代码块中,它将始终在b2a的一次迭代中递增(最多4次可能的迭代)


关于尝试的任何建议???

在5.3版之前,php有一个非常愚蠢的垃圾收集器:。使用此选项,您甚至无法使用
unset()
释放内存。您必须在取消设置之前中断循环引用,或者至少使用php 5.3。

您是否查看了通过以下方式检索的数据:

$attRow = $AttResults->fetch_object()
迭代1050之前/前后


……还有。。。是的,我会在while中更改赋值,在循环之前取一个,在循环结束之前取一个,以查看内存是否发生变化。

您使用的是什么版本的PHP?与5.2相比,PHP5.3显著提高了内存使用率。我使用的是5.4.11,脚本是从命令行调用的(如果这有什么区别的话)。我不太明白几十万次迭代从何而来。显示的while循环是否经常运行?还是整个脚本都在一个循环中?@fab:整个脚本都在一个循环中运行;否则他的注释(在代码中)就没有意义了。它在两个while循环内。最外层是do…while循环,它将传入的数据分成大块,最内层的循环覆盖查询中的每一行。我必须分解最外层的块,否则较大的查询会立即占用内存。我试图让它运行在大约5300万个条目的数据集上。但现在,如果它能完成100万,我会很高兴的。我已经检查过了。该变量包含一个关联数组,其中包含3-6个元素。切换到fetch_all(),并且内存使用情况没有更改。
$attRow = $AttResults->fetch_object()