ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-Laravel排队的作业比超时时间长很多

2019-11-11 20:31:29  阅读:318  来源: 互联网

标签:laravel laravel-queue php laravel-5-3


我有一个Laravel排队的工作,它从网页中提取链接.通过Laravel Forge配置的队列侦听器的超时为240秒(4分钟).但是,作业最多需要45分钟才能运行.

我的队列设置是:

'redis' => [
    'driver' => 'redis',
    'connection' => 'default',
    'queue' => 'default',
    'retry_after' => 350,
],

并且有多个作业流程在运行-多达35个流程.可以想象,这正在消耗大量服务器内存.这些过程似乎一直徘徊.如上所示,这些过程的命令是:

php7.1 artisan queue:work redis --once --queue=linkqueue --delay=0 --memory=128 --sleep=10 --tries=1 --env=local

如果超时为240秒,作业如何运行45分钟?为什么会有这么多流程-不应该只有一个流程吗?

还有,为什么要提取链接的脚本要花45分钟才能运行?

该脚本确实可以正常工作,也就是说,在大多数情况下,它可以按预期运行,并且需要很长时间.据我所知,没有报告/记录错误.

工作中的代码是:

$dom = new DOMDocument;
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');

foreach ($links as $a) {
    $link = $a->getAttribute('href');

    $newurl = new URL;
    $newurl->url = $link;
    $newurl->save();
}

更新:另一个简单的工作就可以在不到一秒钟的时间内运行良好.特别是上面的链接作业​​需要10分钟的时间.可能是RAM问题吗?我还能做些什么来诊断问题?作为控制台作业的一部分运行时,提取链接功能本身将在1或2秒内运行.它只是在队列中吓坏了.

解决方法:

How can a job run for 45 minutes if the timeout is 240 seconds?

因为您有’retry_after’=> 350,在您的队列连接上.这意味着如果Laravel在350秒后没有收到作业的消息-则认为作业已失败并再次重试.这导致您遇到的情况是一项工作的多个过程.

如果您愿意让您的作业最多运行45分钟-那么您应该将retry_after设置为更大的数字.说3600,即1小时.

这样,只有在运行时间超过1小时后,作业才能开始.

标签:laravel,laravel-queue,php,laravel-5-3
来源: https://codeday.me/bug/20191111/2022182.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有