在使用PHP脚本时,我看起来遇到了典型的内存中断问题。
该脚本最初由另一个人开发,用作XML站点地图创建者,在大型网站上使用相当多的内存。
我认为问题是相关的,因为算法在内存中保存数据直到作业完成,但是挖掘代码我发现脚本以这种方式工作:
虽然内存中没有大量的数组或变量,但这种技术会占用大量内存。
我认为也许PHP在脚本末尾缓存了fwrites和“刷新”数据,所以我修改了代码以关闭并打开每个Nth记录的文件,但是内存使用量仍然是我在计算机上调试脚本并观察内存使用情况:当脚本执行运行时,内存分配会增加。
是否有一种特殊的技术来指示PHP释放未使用的内存,强制刷新缓冲区(如果有的话)?
由于
答案 0 :(得分:1)
更改解析XML文件的方式。我猜它正在将整棵树加载到内存中。
请改用event parser。我用这个处理了几千兆字节的XML文件。
答案 1 :(得分:1)
所以你正在寻找一个不是你自己编写的大型PHP程序中的内存泄漏?在检查了常见问题(加载巨大的db结果,而不是刷新/关闭文件)之后,我认为你应该使用像XDEBUG(http://xdebug.org/)这样的分析器来帮助你识别内存问题。其他任何东西都只是猜测大部分时间。我已经有过几次这种经历......
答案 2 :(得分:0)
必须有一些数据源自的地方,请仔细查看,以便在站点地图中添加每个条目部分代码。可能是同时加载了大量的DB记录集,或类似的其他东西。
无论如何,为了解决这个问题,如果你要从数据库加载数据,请尝试限制结果数量,然后循环以在数据集之后设置。
答案 3 :(得分:0)
要刷新文件缓冲区,请使用fflush()
(http://ch.php.net/manual/en/function.fflush.php)并释放分配给变量的空间,unset()
(http://ch.php.net/unset)应该这样做。
你说你试图在此过程中关闭并重新打开文件,因此冲洗缓冲区肯定不是解决方案。为什么不向我们展示一些代码,内存泄漏有时是非常不明显的?
答案 4 :(得分:0)