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

GitHub Actions运行Laravel功能测试时PHP内存耗尽错误如何解决

GitHub Actions 运行Laravel功能测试内存耗尽问题排查方案

问题现状

本地执行Laravel功能测试可全量通过,触发GitHub Actions工作流后,在执行750个功能测试的过程中,跑到总进度16%时触发PHP致命错误:CI环境默认的1G内存上限(对应报错中的1073741824字节)耗尽,报错定位在Symfony Routing组件的路由编译环节,无法完成测试流程。

可落地的调整操作

1. 直接调整测试执行环节的PHP内存限制

GitHub Actions运行器的默认PHP配置中memory_limit为1G,在加载完整Laravel应用、批量编译路由的场景下很容易触顶,不需要修改全局PHP配置,直接在执行PHPUnit命令时临时调高内存上限即可:

  • 将原有执行PHPUnit的命令
    - name: Execute Feature tests via PHPUnit
      run: vendor/bin/phpunit --testsuite Feature
    
    修改为带内存参数的写法:
    - name: Execute Feature tests via PHPUnit
      run: php -d memory_limit=4G vendor/bin/phpunit --testsuite Feature
    
  • GitHub Actions的Linux运行环境宿主机有足够的内存支撑4G的配置上限,不会出现宿主机资源不足的问题。

2. 优化工作流配置,减少无意义的内存消耗

现有配置存在几个会推高内存峰值的设置,调整后可以明显降低内存占用:

  • 将setup-php步骤里的Composer版本从v1调整为v2,Composer v2的自动加载机制比v1节省30%左右的运行时内存:
    - uses: shivammathur/setup-php@v2
      with:
        php-version: '7.3'
        extensions: gd, mysql
        tools: composer:v2
    
  • 依赖安装环节增加权威类映射参数,减少运行时自动加载的内存开销,修改安装命令为:
    - name: Install Dependencies
      run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist --classmap-authoritative
    
  • 执行测试前增加Laravel运行缓存清理步骤,避免旧缓存加载带来的额外内存占用:
    - name: Clear Laravel runtime cache
      run: |
        php artisan route:clear
        php artisan config:clear
        php artisan cache:clear
    

3. 特殊场景下的内存兜底方案

如果调整完内存上限后仍出现内存峰值过高的问题,可以开启PHPUnit的进程隔离模式,让每个测试文件执行完后自动释放内存,避免单进程内存持续累积:

  • 对应的执行命令调整为:
    - name: Execute Feature tests via PHPUnit
      run: php -d memory_limit=2G vendor/bin/phpunit --testsuite Feature --process-isolation
    
  • 注意不要将memory_limit设置为-1(无内存限制),否则如果出现内存无限膨胀的情况,会触发GitHub Actions运行器的OOM机制直接终止任务,反而导致测试失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 09:45:02