解析并组合了许多xml文件,内存不足

时间:2017-10-15 15:19:53

标签: php xml symfony optimization memory-leaks

你能帮我解决一下能够解析和组合12个xml文件的想法,每个文件有~5兆,最后有一个全局文件。

目前,我使用cron运行脚本(symfony框架命令)

对于每个文件,我使用bundle JMSSerializerBundle对其进行反序列化,它允许从xml文件创建一个对象。

我有记忆问题。我认为这是由于这种反序列化。

所以我的问题是,

  • 你知道一个更好的方法来做这个stup,如果我用SimpleXML解析这个反序列化替换这个反序列化,你认为它消耗更少的内存吗?

  • 另外,如果我将文件保存在变量Redis中它会改变什么吗?

  • 而且,最后一个问题,如果我使用数据库,例如,我将文件保存在表中,然后我检索表中的所有记录,并用此构建全局xml文件,可以吗是个好主意? 或者分几步构建全局文件(每次3个文件),每次在表中保存,每次都以简单的数组检索数据。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

如果这是通过命令行完成的任务之一,您可以通过在开头使用memory_limit将PHP的-1设置为ini_set('memory_limit', -1);来逃脱CLI脚本。

这显然不是请求的选项,因为单个请求可能会占用系统的所有内存。另请注意,您显然仍受可用系统内存的限制,因此您可能仍会遇到此问题。

正如评论中已经建议的那样,您可以通过使用像XMLReader这样的拉解析器来减少内存使用量。这将减少读取XML所消耗的内存量,但显然保持读取数据(可能在数组中)仍将累积。如果您没有使用最新的PHP版本,那么这可能是优化内存使用的最简单方法。

除此之外,我建议使用像xhprof或blackfire.io这样的工具来分析脚本的内存使用情况,并尝试修复它们指出的主要问题。