From 926236ace06a38d77d7015aa7ce43d491c479b2d Mon Sep 17 00:00:00 2001 From: David Jardin Date: Tue, 25 Nov 2025 18:16:56 +0100 Subject: [PATCH 1/4] increase productio worker count --- config/horizon.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/horizon.php b/config/horizon.php index 4f2d7fc..a50157d 100644 --- a/config/horizon.php +++ b/config/horizon.php @@ -211,12 +211,12 @@ 'environments' => [ 'production' => [ 'supervisor-default' => [ - 'maxProcesses' => 15, + 'maxProcesses' => 20, 'balanceMaxShift' => 1, 'balanceCooldown' => 3, ], 'supervisor-updates' => [ - 'maxProcesses' => 40, + 'maxProcesses' => 60, 'balanceMaxShift' => 1, 'balanceCooldown' => 3, ], From 00209215578b1fa12646f49f1da3fb1a7e06a5c5 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Wed, 26 Nov 2025 16:07:12 +0100 Subject: [PATCH 2/4] Improve queue stats output --- app/Health/QueueLengthCheck.php | 30 +++++++++++++++++++++++++++ app/Providers/HealthCheckProvider.php | 2 ++ routes/console.php | 1 + 3 files changed, 33 insertions(+) create mode 100644 app/Health/QueueLengthCheck.php diff --git a/app/Health/QueueLengthCheck.php b/app/Health/QueueLengthCheck.php new file mode 100644 index 0000000..1530083 --- /dev/null +++ b/app/Health/QueueLengthCheck.php @@ -0,0 +1,30 @@ +appendMeta([ + 'pending' => $jobs->countPending(), + 'failed' => $jobs->countFailed(), + 'completed' => $jobs->countCompleted() + ]); + + if ($jobs->countPending() > 50000) { + return $result + ->failed('Job queue larger than 50.000 items') + ->shortSummary('Excessive queue length'); + } + + return $result->ok(); + } +} diff --git a/app/Providers/HealthCheckProvider.php b/app/Providers/HealthCheckProvider.php index 4123654..954ed16 100644 --- a/app/Providers/HealthCheckProvider.php +++ b/app/Providers/HealthCheckProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Health\QueueLengthCheck; use Illuminate\Support\ServiceProvider; use Spatie\CpuLoadHealthCheck\CpuLoadCheck; use Spatie\Health\Checks\Checks\DatabaseCheck; @@ -29,6 +30,7 @@ public function boot(): void UsedDiskSpaceCheck::new(), DatabaseCheck::new(), HorizonCheck::new(), + QueueLengthCheck::new(), RedisCheck::new(), CpuLoadCheck::new() ]); diff --git a/routes/console.php b/routes/console.php index aabe8d1..c18a76a 100644 --- a/routes/console.php +++ b/routes/console.php @@ -8,3 +8,4 @@ Schedule::command(CleanupSitesList::class)->everySixHours(); Schedule::command(PruneFailedJobsCommand::class)->daily(); Schedule::command(QueueHealthChecks::class)->everyFifteenMinutes(); +Schedule::command('horizon:snapshot')->everyFiveMinutes(); From ccf0edd2ffb2be1b51727090521fa09761b4b667 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Wed, 26 Nov 2025 16:08:30 +0100 Subject: [PATCH 3/4] cs fix --- app/Health/QueueLengthCheck.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Health/QueueLengthCheck.php b/app/Health/QueueLengthCheck.php index 1530083..4eab7e4 100644 --- a/app/Health/QueueLengthCheck.php +++ b/app/Health/QueueLengthCheck.php @@ -5,6 +5,7 @@ use Laravel\Horizon\Contracts\JobRepository; use Spatie\Health\Checks\Check; use Spatie\Health\Checks\Result; + class QueueLengthCheck extends Check { public function run(): Result From 1675a6e2c61c456fe46880a4f6195bf7c8dd47e7 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Tue, 25 Nov 2025 18:27:08 +0100 Subject: [PATCH 4/4] further increase worker count (#55) --- config/horizon.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/horizon.php b/config/horizon.php index a50157d..70c4a72 100644 --- a/config/horizon.php +++ b/config/horizon.php @@ -216,7 +216,7 @@ 'balanceCooldown' => 3, ], 'supervisor-updates' => [ - 'maxProcesses' => 60, + 'maxProcesses' => 80, 'balanceMaxShift' => 1, 'balanceCooldown' => 3, ],