You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP无法为Magento脚本分配超过536870912字节内存的问题

Fixing "Allowed Memory Size Exhausted" When Running Magento Dataflow Export via CLI

我太懂你这种明明调了各种内存设置,却还是被Magento的内存耗尽错误卡脖子的感觉了——尤其是在批量导出产品这种刚需场景下。结合Magento的特性,给你几个针对性的解决方案:

  • 先确认CLI真正在用哪个php.ini
    很多人踩过这个坑:修改了Web端的php.ini,但CLI用的是另一个配置文件。先跑php --ini看看当前CLI加载的配置路径,把这个文件里的memory_limit改成2048M(导出大量产品真的需要这么多),改完记得重启终端生效。

  • 在脚本最开头强制锁死内存限制
    Magento的初始化流程有时候会偷偷覆盖你设置的内存值,所以把内存设置放在脚本最最开头,甚至在Magento的初始化代码之前:

    ini_set('memory_limit', '-1'); // 临时取消内存限制,导出完记得改回正常值
    

    这里用-1是临时放开限制,毕竟导出完就不用了,比设一个固定大值更稳妥。

  • 给Dataflow做分批处理优化
    默认的Dataflow可能会一次性把所有产品加载到内存里,直接爆掉。你可以修改导出脚本,加个分批逻辑:

    1. 找到处理产品的循环,改成每次处理100-200个产品
    2. 每处理完一批,调用gc_collect_cycles()手动触发垃圾回收,把没用的内存释放掉
  • 试试Magento官方的导出Shell命令
    如果你用的是Magento 1.9及以上版本,别折腾自定义脚本了,官方自带的导出命令已经做了内存优化:

    php shell/export.php -p 你的导出配置代码
    

    直接用这个命令跑,稳定性比自己写的脚本好很多。

  • 排查是否有内存泄漏
    要是以上方法都没用,就得看看是不是有第三方模块或者自定义代码在偷偷漏内存。你可以在产品处理循环里加一行echo memory_get_usage() . PHP_EOL;,观察内存是不是一直在涨不回落——如果是,就得排查那些没被释放的对象、全局变量或者资源了。

这些方法应该能帮你搞定这个头疼的内存问题,毕竟Magento处理大量产品时的内存占用确实挺夸张的,得针对性调整才行。

内容的提问来源于stack exchange,提问作者Kris Sinclair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:11:41