【发布时间】:2020-09-01 12:17:09
【问题描述】:
我正在使用 https://laravel.com/docs/6.x/horizon 来管理我的应用程序上的队列(使用 redis 后端)。
队列中的作业是短暂的 - 每个排队的作业都应该进行 api 调用(对第三方)并将响应写入 db。
今天我注意到很多作业卡住/处理非常缓慢:
我正在主机节点上运行 10 个具有足够内存的队列工作程序。这是我的config/horizon.php
return [
'domain' => null,
'path' => 'horizon',
'use' => 'default',
'prefix' => env('HORIZON_PREFIX', 'horizon:'),
'middleware' => ['web', 'basic.api.credential.auth'],
'waits' => [
'redis:default' => 60,
],
'trim' => [
'recent' => 60,
'completed' => 60,
'recent_failed' => 40320,
'failed' => 40320,
'monitored' => 40320,
],
'fast_termination' => false,
'memory_limit' => 512,
'environments' => [
'production' => [
'queue-1' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'simple',
'processes' => 10,
'tries' => 2,
'timeout' => 1800, // 30 Minutes
'memory' => 512,
],
],
// ...
],
];
我检查了远程 api 服务器以查看是否存在瓶颈,但它的响应速度非常快(每个 api 调用不到 1 秒)。检查服务器,我看不到它有任何负载,而且整体内存/cpu 利用率很低。
Laravel v6.18.37
PHP v7.3.21
Horizon v3.7.2
任何想法是什么导致了如此巨大的放缓?如何调试它以了解发生了什么?
我什至尝试重新启动服务器,但没有帮助。我也没有在日志中看到任何超时/错误。
【问题讨论】: