我正在执行长时间运行的php脚本(PHP 7.3),该脚本以循环方式解析XML,并将数据添加到MySQL。我在脚本中使用ini_set('memory_limit', '512M')
将内存限制设置为512MB。问题是,在解析了xml的OOM杀手的大约一半后,错误地杀死了php:
[2019年5月6日星期一16:52:09]内存不足:杀死进程12103(php)得分704或牺牲孩子
[2019年5月6日16:52:09]杀死进程12103(php)total-vm:12540924kB,anon-rss:12268740kB,file-rss:3408kB,shmem-rss:0kB
我尝试使用memory_get_usage和php_meminfo调试代码。它们都表明脚本在每个循环的开始和结束时不超过100MB的内存(xml的大小相同)。我已经在每个循环结束时取消设置所有可能的var。
尽管脚本中有0.5GB的内存限制,但PHP似乎仍使用了12.5GB的RAM。我期望PHP如果达到内存限制但永远不会发生,则会引发致命的memory exhausted
错误。
有什么想法可以解决这个问题吗?
答案 0 :(得分:0)
我已经工作过导入大型xml文件,并且需要大多数人期望的更多内存。正如@NigelRen所建议的,不仅是文件的内存使用,而且是相关的变量和过程,处理大型xml的最佳方法是分批读取文件。这是一个简单的示例,我希望可以为您提供有关如何执行此操作的想法。
console.log