我的 PHP 应用程序有一个可以导入记录的导入脚本。
目前,它正在从 CSV 文件导入。它正在读取 CSV 文件的每一行,使用 fgetcsv 一次一行,并且对于每一行,它对该记录进行大量处理,包括数据库查询,然后转到下一行。它不应该需要不断积累更多的内存。
在导入大约 2500 条记录后,PHP 死了,说它已超出其内存限制(132 MB 左右)。
CSV 文件本身只有几兆 - 发生的其他处理会进行大量字符串比较、差异等。我有大量代码在上面操作,很难想出一个“最小的复制”样本'。
有哪些好方法可以找到并解决此类问题?
发现问题原因
我有一个调试类,它在运行时记录我所有的数据库查询。因此,那些大约 30KB 长的 SQL 字符串保留在内存中。我意识到这不适合设计为长时间运行的脚本。
可能还有其他内存泄漏来源,但我很确定这是我的问题的原因。