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

如何在DDEV环境正确配置PHP memory_limit解决Shopware6内存溢出报错

DDEV环境Shopware6 API内存耗尽问题排查与配置方法

问题根因前置说明

报错信息里的Allowed memory size of 1073741824 bytes exhausted中,1073741824字节恰好等于1024MB,和你设置的memory_limit = 1024M完全匹配,说明web请求实际生效的内存限制就是1G,拉取11000条商品时,Shopware完成模型组装、响应序列化的过程中内存占用超过阈值,最终在sendContent()输出阶段触发致命错误。
你之前通过SSH进容器拿到的memory_limit => -1是PHP CLI模式的配置,DDEV默认给CLI模式设置无内存限制,方便运行composer、批量处理脚本,但网站接口请求走的是PHP-FPM进程,两者配置完全独立,CLI的配置结果不能代表web请求的实际生效值,你猜测的“无上限配置导致服务异常”不成立。

排查步骤

  • 第一步:校验web请求实际生效的PHP配置
    在项目public目录下新建临时文件phpinfo_check.php,内容为<?php phpinfo();,通过浏览器访问https://sw6.ddev.site/phpinfo_check.php,搜索memory_limit项,这里显示的值才是接口请求实际加载的内存限制值,验证完成后立刻删除该临时文件避免安全风险。
  • 第二步:排查配置覆盖项
    检查两个位置是否存在手动配置的内存限制覆盖php.ini设置:
    1. 项目根目录及public目录下的.user.ini文件,是否存在memory_limit = xxx配置
    2. 项目public目录下的.htaccess文件,是否存在php_value memory_limit xxx配置
      存在上述配置的话直接删除即可。
  • 第三步:确认你之前修改的php.ini路径无效
    你修改的/var/www/html/config/etc/php7/conf.d/php.ini不属于DDEV默认加载的PHP配置路径,直接进容器修改文件的方式也会在容器重建后全部丢失,不会持久生效。

DDEV环境正确设置PHP memory_limit的方法

不要进入容器内部修改配置,使用DDEV提供的持久化配置方式,修改后重启服务即可生效:

  • 方法1(推荐,可统一管理所有自定义PHP配置)
    在项目根目录的.ddev目录下新建php文件夹(如果不存在则手动创建),在文件夹内新建自定义配置文件比如shopware-php.ini,写入需要的配置:
    [Date]
    date.timezone="UTC"
    memory_limit = 2048M
    upload_max_filesize = 6M
    max_execution_time = 30
    
  • 方法2(命令行快速设置)
    在项目根目录执行DDEV配置命令直接设置内存限制:
    ddev config --php-memory-limit 2048M
    

配置完成后执行重启命令让配置加载到FPM和CLI进程:

ddev restart

重启完成后回到之前的phpinfo校验页面,确认memory_limit已经更新为你设置的值即可。

优化建议

拉取11000条全量商品时,Shopware默认会序列化所有关联字段、扩展属性,内存占用高属于正常现象,如果不需要全量字段,可以在API请求中通过associations参数指定需要拉取的字段、关闭不必要的关联查询,能大幅降低内存占用,不需要盲目调高内存限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:01:00