Ada*_*utt 5 queue supervisord laravel pusher
TL; DR Laravel Horizon 队列工作人员在处理每个作业后进入睡眠状态 60 秒
我的 Laravel Horizon 队列中有大量积压。有很多工作人员(maxProcesses 设置为 30),但是当我监视日志文件时,输出表明它在 2-3 秒的过程中正好处理了 30 个作业,然后它暂停了整整一分钟(更多或不到 60 秒)。
任何想法为什么会发生这种情况?我是否达到了导致 Horizon 或 Supervisor 中断的资源限制?
这是我的 horizon.php 配置文件中的相关部分:
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['high', 'default', 'low'],
'balance' => 'false',
'minProcesses' => 3,
'maxProcesses' => 30,
'timeout' => 1800,
'tries' => 3
],
Run Code Online (Sandbox Code Playgroud)
我在本地环境中有完全相同的配置,本地吞吐量约为 600 个作业/分钟。在生产中,它徘徊在大约 30 个工作/分钟左右。
根据@Qumber 的请求更新
在大多数情况下,这些实际上并不是工作。它们是由一个或多个侦听器处理的事件,其中大部分都非常简单。例如:
public function handle(TransactionDeleted $event)
{
TransactionFile::where("transaction_id", $event->subject->id)->delete();
}
Run Code Online (Sandbox Code Playgroud)
这是一些队列配置:
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 1900,
'block_for' => null,
],
Run Code Online (Sandbox Code Playgroud)
根据@sykez 请求更新
这是本地的主管配置:
[program:laravelqueue]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/artisan queue:once redis --sleep=1 --tries=1
autostart=true
autorestart=true
user=adam
numprocs=3
redirect_stderr=true
stdout_logfile=/path/to/worker.log
stopwaitsecs=3600
Run Code Online (Sandbox Code Playgroud)
这是生产中的主管配置:
[program:daemon-XXXXXX]
directory=/home/forge/SITE_URL/current/
command=php artisan horizon
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/.forge/daemon-XXXXXX.log
stopwaitsecs=3600
Run Code Online (Sandbox Code Playgroud)
本地主管直接运行队列,带有“once”标志,它应该为每个作业加载整个代码库,而不是作为守护进程运行。当然,这应该使它变慢,而不是快 20 倍......
另一个更新 感谢 Laravel 核心开发人员之一的帮助,我们能够确定所有“挂起”的作业都是广播作业,从配置为在触发后广播的事件。我们使用 Pusher 作为我们的广播引擎。当 Pusher 被禁用时(就像在我们的本地环境中一样),作业会立即完成而不会暂停。
小智 0
我遇到了同样的问题,队列在开始下一个作业之前突然等待一分钟,即使是在多个线程上,但对我来说,触发它的作业之间几乎没有相关性(而且通常是相同的作业,但并不总是如此) )。
我最终通过将 config/horizon.php 中的内存限制从 64 增加到 128mb 解决了这个问题:
'defaults' => [
'supervisor-1' => [
'memory' => 128,
],
],
Run Code Online (Sandbox Code Playgroud)
此设置在 Horizon v5 中的某个时候被添加到默认配置中,大小为 128MB,但在我正在使用的系统上,它已经设置为 64MB,导致此问题最终出现。
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |