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

Laravel 8使用Maatwebsite Excel队列导出10万行数据报内存溢出及超时错误如何解决

问题根源与解决方法

你遇到的超时、文件大小停止增长的问题,来自配置错误、代码语法残留以及队列CLI环境配置不匹配几个原因,按以下步骤排查修改即可:

1. 修复队列任务超时与重试配置

MaxAttemptsExceededException 报错是因为默认队列任务的最大执行时长、重试次数不匹配大数据导出的需求,直接在 MarkupAccount 类中增加两个属性覆盖默认配置:

class MarkupAccount implements WithMultipleSheets, ShouldQueue
{
    use Exportable;
    // 新增以下两个属性
    public $timeout = 3600; // 任务最大执行时长设为1小时,可根据实际需要调整
    public $tries = 1; // 任务仅重试1次,避免重复执行占用资源
    protected $year;
    
    // 原有代码保持不变
}

启动队列进程时增加--timeout参数和任务配置对齐:

php artisan queue:work --memory=1024 --timeout=3600

2. 修正Laravel Excel配置错误

你之前在config/excel.php中设置的memory_limit => 6000000单位为字节,换算后仅不到6MB,完全无法支撑大数据导出,修改为:

// config/excel.php
return [
    // 其他配置不变
    'memory_limit' => '1024M',
    'chunk_size' => 500, // 调小分块大小,减少单次查询内存占用
    // 额外增加临时目录配置,避免系统临时目录权限/空间不足
    'temporary_files' => [
        'path' => storage_path('tmp/laravel-excel'),
    ],
];

创建对应的临时目录并赋予写入权限:

mkdir -p storage/tmp/laravel-excel
chmod -R 755 storage/tmp

3. 修复代码语法错误

MarkupAccountsYears类的query方法第一行有多余的语法残留>orderBy('TimeMsc');,直接删除该行即可,避免SQL语法异常导致任务中断。

4. 修正CLI端PHP配置

你修改的WAMP下的php.ini是Web请求使用的配置,队列CLI进程加载的是独立的PHP配置文件,执行以下命令查看CLI加载的配置路径:

php --ini

打开对应路径的php.ini文件,修改以下配置:

memory_limit = 1024M
max_execution_time = 0

5. 修正Controller中的链式调用逻辑

你当前代码中chain([dump("Done")])的dump方法只能在HTTP请求上下文输出内容,队列执行时没有输出终端,会导致进程异常中断,修改为日志记录或者用户通知逻辑即可:

public function downloadExcl(){  
  (new MarkupAccount(2021))->queue('test'.time().'.xlsx')->chain([
      // 替换为实际的完成逻辑,比如给用户发站内信、写日志等
      new \App\Jobs\NotifyExportComplete()
  ]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:03