Kök Sebep: app/Console/Kernel.php içindeki horizon-auto-restart cron job'u her 5 dakikada Horizon'ı öldürüp yeniden başlatıyordu. Bu, orphan process'ler ve çift başlatma sorununa yol açıyordu.
Sistem crontab'ında Laravel scheduler her dakika tetikleniyor:
* * * * * /usr/bin/php artisan schedule:run
app/Console/Kernel.php satır 92-117:
$schedule->call(function () {
exec('php artisan horizon:status 2>/dev/null', $output, $return_var);
if ($return_var !== 0 || empty($output)) {
// ❌ SORUN: pkill tüm Horizon'ları öldürüyor
exec('pkill -f "horizon" 2>/dev/null');
sleep(2);
// ❌ SORUN: Background'da başlatıyor (orphan process!)
exec('cd ' . base_path() . ' && php artisan horizon > /dev/null 2>&1 &');
}
})->everyFiveMinutes();Supervisor zaten Horizon'u yönetiyor ama Cron da ayrıca başlatıyor!
Her Horizon master şu supervisor'leri oluşturuyor:
- ai-supervisor (max 2 processes) - tenant-supervisor (max 1 process) - background-supervisor (max 1 process)
Toplam: 4 master × 3 supervisor = 12 supervisor process
Her supervisor, her queue için ayrı worker oluşturuyor:
ai-supervisor queues: - ai-translation, ai-content, ai-file-analysis - translation, ai, blog-ai, critical = 7 queue × 2 processes = 14 worker tenant-supervisor queues: - tenant_isolated, default, hls - tenant_1001_default, tenant_1001_hls = 5 queue × 1 process = 5 worker background-supervisor queues: - background, maintenance = 2 queue × 1 process = 2 worker
Her supervisor grubu: ~20 worker
4 master × 3 supervisor × ~20 worker = 240+ process potansiyeli! Gerçekte: ~112 process (bazı queue'ler boş olduğu için spawn etmedi)
app/Console/Kernel.php - Satır 91-102 comment'lendi:
// 🔧 HORIZON MONITORING - DISABLED (Supervisor handles restart)
// ⚠️ BU AUTO-RESTART SORUNLUYDU!
// - Her 5 dakikada pkill yapıyordu
// - Background'da başlatıyordu (&) → Orphan process
// - Supervisor zaten Horizon'u yönetiyor
//
// $schedule->call(function () {
// // DISABLED
// })->everyFiveMinutes();Neden: Supervisor zaten Horizon'u yönetiyor, cron'dan çift başlatmaya gerek yok!
config/horizon.php - Production environment maxProcesses azaltıldı:
↓ %61 azalma
↑ 21 puan artış
↓ %66 azalma
↓ 15-22x hızlanma
Background process'leri exec(...&) ile başlatırsanız orphan process oluşur. Supervisor veya systemd kullanın!
Eğer Supervisor zaten Horizon'u yönetiyorsa, cron'dan ayrıca restart yapmayın! Çift başlatma CPU patlamasına neden olur.
Production environment için agresif değerler (8, 6, 2) yerine konservatif değerler (2, 2, 1) kullanın. Gerektiğinde artırın.
Her queue için ayrı worker spawn edilir. 7 AI queue yerine birleştirilebilir queue'ler kullanın (priority ile ayırın).
🔍 Test 1: 3.31s 🔍 Test 2: 2.23s 🔍 Test 3: 3.20s Ortalama: ~2.9s (önceden 45s timeout!)
happy-sammet159-253-45-94pleskpage-AcVu (PID: 358117) happy-sammet159-253-45-94pleskpage-CNnk (PID: 358123) Toplam: 2 master (önceden 4-5 master)
2 master × 3 supervisor × ~6 worker = ~38 process (önceden: 4 master × 3 supervisor × ~20 worker = 112+ process)