没有不值得去解决的问题,也没有不值得去学习的技术!

在 Laravel 9 中 job 运行报错:has been attempted too many times or run too long. The job may have previously timed out.

在 Laravel 9 中 job 运行报错:has been attempted too many times or run too long. The job may have previously timed out.
1、在 Laravel 9 中 job 运行报错:has been attempted too many times or run too long. The job may have previously timed out.。如图1
在 Laravel 9 中 job 运行报错:has been attempted too many times or run too long. The job may have previously timed out.
图1
2、发现在表中的记录数量共 8761297 条。基于 chunk 方法,以一次 10 条记录的块为单位检索整个表。在闭包函数的开关打印每一次的时间。最后结果如下


[2024-04-09 09:43:57] local.INFO: exportExcelStart {"datetime":"2024-04-09 09:43:57"} 
[2024-04-09 09:43:58] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:43:58"} 
[2024-04-09 09:44:00] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:00"} 
[2024-04-09 09:44:01] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:01"} 
[2024-04-09 09:44:03] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:03"} 
[2024-04-09 09:44:05] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:05"} 
[2024-04-09 09:44:07] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:07"} 
[2024-04-09 09:44:09] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:09"} 
[2024-04-09 09:44:11] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:11"} 
[2024-04-09 09:44:13] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:13"} 
[2024-04-09 09:44:14] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:14"} 
[2024-04-09 09:44:16] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:16"} 
[2024-04-09 09:44:18] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:18"} 
[2024-04-09 09:44:20] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:20"} 
[2024-04-09 09:44:22] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:22"} 
[2024-04-09 09:44:23] local.INFO: exportExcelChunk {"datetime":"2024-04-09 09:44:23"}


3、最终得出结论,每10条记录的处理,需要耗费的平均时长为 1.8 秒。决定将 10 调整为 1000。在闭包函数的开关打印每一次的时间。最后结果如下。每100条记录的处理,需要耗费的平均时长为 4.8 秒。那么相当于每 10 条记录的处理时间缩短至 0.48 秒。


[2024-04-09 09:53:48] local.INFO: exportExcelStart {"datetime":"2024-04-09 09:53:48"} 
[2024-04-09 09:53:53] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:53:53"} 
[2024-04-09 09:53:58] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:53:58"} 
[2024-04-09 09:54:02] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:02"} 
[2024-04-09 09:54:07] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:07"} 
[2024-04-09 09:54:11] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:11"} 
[2024-04-09 09:54:15] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:15"} 
[2024-04-09 09:54:20] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:20"} 
[2024-04-09 09:54:24] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:24"} 
[2024-04-09 09:54:28] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:28"} 
[2024-04-09 09:54:32] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:32"} 
[2024-04-09 09:54:37] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:37"} 
[2024-04-09 09:54:42] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:42"} 
[2024-04-09 09:54:48] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:48"} 
[2024-04-09 09:54:57] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:54:57"} 
[2024-04-09 09:55:04] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:55:04"} 
[2024-04-09 09:55:09] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:55:09"} 
[2024-04-09 09:55:14] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:55:14"} 
[2024-04-09 09:55:18] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:55:18"} 
[2024-04-09 09:55:22] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:55:22"} 
[2024-04-09 09:55:27] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:55:27"} 
[2024-04-09 09:55:33] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 09:55:33"} 


4、再次尝试每次 10000 条记录,每10000条记录的处理,需要耗费的平均时长为 41 秒。那么相当于每 10 条记录的处理时间缩短至 0.41 秒。那么理论上来说,1000 的值是合适的。一次处理的内存占用更少,且总体耗费时间上,与 10000 相比,也并未延长多少了。


[2024-04-09 10:07:17] local.INFO: exportExcelStart {"datetime":"2024-04-09 10:07:17"} 
[2024-04-09 10:08:04] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 10:08:04"} 
[2024-04-09 10:09:00] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 10:09:00"} 
[2024-04-09 10:09:55] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 10:09:55"} 
[2024-04-09 10:10:49] local.INFO: exportExcelChunk1000 {"datetime":"2024-04-09 10:10:49"} 


5、在性能环境中,第 1000 条记录的处理时长为 0.6 秒,那么相当于每 10 条记录的处理时间缩短至 0.06 秒。最终决定限制最大导出行数为 100000。代码实现如下


        $count = 0;
        $orderShippingLogQueryBuilder->chunk(1000, function ($orderShippingLogs) use ($params, $excel, $columns, &$count) {
            // 限制最大导出行数为 100000
            if ($count >= 100000) {
                return false;
            }

            Log::info(
                'exportExcelChunk1000',
                [
                    date('Y-m-d H:i:s', time())
                ]
            );
            $data = [];


            $count = $count + 1000;
        });


6、查看 Laravel Telescope,本地环境设置为 3000,确认执行了 3 条 查询 SQL,符合预期。如图2
查看 Laravel Telescope,本地环境设置为 3000,确认执行了 3 条 查询 SQL,符合预期
图2
7、最终在性能环境,导出一个 100000 行的 Excel,总计执行时长为:107 秒。符合预期。


exportExcelStart ["2024-04-10 03:56:32"] 
exportExcelChunk1000 ["2024-04-10 03:56:32"] 
exportExcelChunk1000 ["2024-04-10 03:56:33"] 
exportExcelChunk1000 ["2024-04-10 03:56:33"]
exportExcelChunk1000 ["2024-04-10 03:56:34"] 
exportExcelChunk1000 ["2024-04-10 03:56:35"] 
exportExcelChunk1000 ["2024-04-10 03:56:36"] 
exportExcelChunk1000 ["2024-04-10 03:58:13"] 
exportExcelEnd ["2024-04-10 03:58:19"] 


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理