504, Nginx beklemeyi bıraktığında sayfanın hâlâ kuruluyor olduğu anlamına gelir. Hiçbir şey çökmedi. Bir şey, izin verilenden uzun sürdü; dürüst soru da şudur: ne.
Yavaş isteği bulun
PHP-FPM, isterseniz bir yavaşlık kaydı tutar ve süre dolduğunda hangi işlevin çalıştığını tam olarak yazar. Yanıtın tamamı budur; bu yüzden başka bir şeyi değiştirmeden önce onu açın.
; in the pool config
request_slowlog_timeout = 5s
slowlog = /var/log/php8.3-fpm-slow.log
- PHP-FPM'i yeniden yükleyin — systemctl reload php8.3-fpm
- Yavaş sayfayı yeniden çağırın — Tek bir istek yeter.
- İzi okuyun — tail -60 /var/log/php8.3-fpm-slow.log — en üstteki çerçeve, çalışmakta olan şeydir.
Genelde bu üç şeyden biridir
- Zaman aşımı olmayan bir dış çağrı. Yanıt vermeyi bırakmış bir ödeme geçidi ya da API, soket açık kaldığı sürece sayfanızı tutar. Dışarı giden her istek kendi zaman aşımına muhtaçtır ve beş saniye zaten cömerttir.
- Dizini olmayan bir sorgu. Geçen yıl küçük olan bir tablo artık küçük değildir. Yavaş sorgu kaydı onun adını verir.
- Bir klasör üzerinde dönen bir döngü. Yüz bin dosyaya ulaşmış bir klasörün listelenmesi dakikalar alır.
fastcgi_read_timeout'u yükseltmek hatayı yok eder ve ziyaretçiyi bir dakika yerine beş dakika boş bir sekmeye baktırır. Sınırı değil, beklemeyi düzeltin.
Yükseltmenin doğru OLDUĞU durum
Tek bir durum: kendi başlattığınız, bilerek uzun süren bir iş — bir göç, büyük bir içe aktarma — ve yalnızca sizin kullandığınız bir sayfa. Onu yalnızca o konum için yükseltin, asla genel olarak değil.
location = /admin/import.php {
fastcgi_read_timeout 600;
}
Bir ziyaretçinin tetikleyebildiği her şeyin yeri bir kuyruktur. Sayfa işi başlatıp hemen geri döner; iş bittiğinde kendisi haber verir.