我的工作是将电子邮件推送到 Laravel 队列中,然后将它们发送到 SendGrid。 邮件队列有 15k 个作业,但一旦达到 3.8k 左右,它就会停止,没有任何错误或警告。当它到达队列末尾时它就会停止,留下失败的作业。
这是我用来将作业添加到队列的代码:
$message = (new SongChallengeEmail(
$this->getUsername($emailRawData->name, $emailRawData->username, $emailRawData->email),
$emailRawData->email,
$emailRawData->artists
))
->onConnection('database')
->onQueue('emails');
Mail::queue($message);
最初,我以为是php的内存限制的问题,所以我尝试分配比默认(128MB)更多的内存。我尝试了两种配置:
php artisan queue:work database --queue=emails --memory=8000
和
php -d memory_limit=1G database --queue=emails artisan queue:work
但它们都不起作用,所以我假设还有更多我没有理解的事情。
我正在考虑实施主管有Laravel的文档建议,但首先我想了解为什么会发生这种情况。
有人曾经成功解决过同样的问题吗?
队列工作人员有意设置运行时限制 - 这有助于操作系统管理潜在的内存泄漏、系统资源锁定……线程运行时间越长,这些问题就会累积。
易于修复。其中任何一项都可以让您重回正轨: