Laravel 作业虽然已完成但仍处于 "Processing" 状态

Laravel job stays in "Processing" state although finished

我的 laravel 队列系统有问题。出于性能目的,我们使用 laravel 排队系统和亚马逊 SQS 进行更重的计算。这至少对我们的大部分工作都有效。其中一些原始计算时间约为 25 秒的队列在 "Procesing" 状态下持续阻塞队列 6 分钟。

我们确实记录了作业的完整 handle 功能,输出在任何时候都是正确的。事实上,最后一条日志语句(函数结束)是在进入函数后 20 秒打印的。数据按预期计算,数据库是最新的,但作业仍然是 "Processing"。

在我们故意在 handle 函数结束时使作业崩溃后,计算的数据被完美存储,但显然队列也崩溃了。所以我想它一定是在 handle 函数之后发生的事情。也许有分配内存的东西?

队列的配置是默认的sqs驱动配置:

'sqs' => array(
    'driver' => 'sqs',
    'key'    => env('AWS_KEY', 'secret'),
    'secret' => env('AWS_SECRET', 'secret'),
    'queue'  => env('AWS_SQS_QUEUE', 'secret'),
    'region' => env('AWS_SQS_REGION', 'secret'),
),

编辑: 我发现它不仅是队列,而且当我将作业作为命令执行时,也会出现相同的行为:

我打印 "Done." 作为命令中的最后一条语句,在它打印后控制台暂停几秒钟,然后返回到控制台输入。

当我注释掉查询最多的部分时,问题就消失了,就像我使用的查询越多,我就越需要等待控制台。

我希望你们中的任何人都知道导致这种行为的原因以及我们如何解决它。

提前致谢

好的,我找到问题了。

问题是 telescope 已启用。所以在代码执行后 telescope 忙于记录所有请求和缓存命中。

禁用后 telescope 不再有延迟。