Laravel作业虽然完成但仍处于“处理中”状态

时间:2020-04-02 17:38:03

标签: laravel queue jobs laravel-queue

我的laravel队列系统有问题。为了性能起见,我们使用带有Amazon SQS的laravel排队系统进行更重的计算。至少对我们大多数工作而言,这都行得通。其中一些原始计算时间约为25秒,因此在“处理中”状态下将队列阻塞6分钟。

我们确实记录了作业的完整handle功能,并且输出随时都是正确的。实际上,最后一个日志语句(函数的结尾)在进入函数后20秒钟被打印出来。数据已按预期计算,并且数据库是最新的,但作业仍在“处理中”。

enter image description here

我们有意地在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'),
),

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

我打印“完成”。作为命令中的最后一条语句,并在其打印后,控制台会暂停几秒钟,然后返回到控制台输入。

enter image description here

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

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

预先感谢

1 个答案:

答案 0 :(得分:3)

好,我发现了问题。

问题是启用了望远镜。因此,执行代码后,望远镜将忙于记录所有请求和缓存命中。

禁用望远镜后,再也没有延迟了。