Shopware 5 迁移至 Shopware 6 时出现内存超限错误求助
调整迁移助手的批量读取配置
迁移助手默认的批量读取量可能适配不了大数据量店铺。找到迁移助手的配置文件config/packages/shopware_migration.yaml,把batch_size参数从默认的100左右降到20甚至10,减少单次读取的数据量。如果用命令行执行迁移,直接加参数--batch-size=20临时覆盖配置就行。确认PHP CLI的内存限制生效
很多人只改了web端的php.ini,但迁移是通过CLI执行的,要单独检查CLI模式的内存配置。执行php -i | grep memory_limit,确保CLI的memory_limit设置成-1(无限制)或者足够大的数值(比如2048M)。如果是Docker环境,要改容器内部的PHP配置,别只改宿主机的。提前清理Shopware 5的冗余数据
无效数据是内存杀手:先删掉Shopware5里已删除的商品、过期的订单日志、重复媒体文件、未使用的属性组。可以用Shopware5自带的清理工具,或者直接跑SQL清理(比如删除s_product表中active=0且deleted=1的记录,操作前一定要备份数据库)。把迁移任务拆得更细
别只选“商品”或“订单”大类,再往下拆分:比如先迁移已发布的商品,再处理草稿商品;先迁移近1年的订单,再迁移更早的。利用迁移助手的筛选功能,加上时间范围、状态过滤,尽可能缩小单次迁移的数据范围。追踪内存占用的具体节点
开启PHP内存追踪,找到内存泄漏的环节。可以在迁移脚本的关键步骤(比如读取数据后、处理数据前)加入echo memory_get_usage(true) . "\n";,打印当前内存占用;或者用命令php -d memory_limit=2048M -d error_log=/tmp/migration_memory.log bin/console migration:run执行迁移,查看日志里的内存峰值,定位问题模块。
内容的提问来源于stack exchange,提问作者Michael T

