PHP tabanlı bir siteyi — WordPress, Laravel veya özel bir uygulama — production ortamında çalıştırıyorsanız, performansın büyük bölümü PHP-FPM yapılandırmasına bağlıdır. PHP-FPM, PHP isteklerini işleyen süreç yöneticisidir ve doğru ayarlanmadığında ya kaynakları boşa harcar ya da yük altında sitenizi yavaşlatır. Bu rehberde PHP-FPM yapılandırmasını ele alıyoruz.
İlgili içerikler: Nginx yapılandırma rehberi · Virtual host yapılandırma · systemd servis yönetimi
PHP-FPM Nedir?
PHP-FPM (FastCGI Process Manager), PHP kodunu çalıştıran ve gelen istekleri bir süreç havuzu üzerinden yöneten bir servistir. Web sunucusu (Nginx veya Apache) bir PHP isteği aldığında onu PHP-FPM'e iletir; PHP-FPM havuzundaki bir işçi (worker) süreci isteği işler ve sonucu döndürür.
Bu mimari, web sunucusu ile PHP'yi birbirinden ayırır. Böylece web sunucusu statik dosyalara hızlı yanıt verirken, PHP işleri ayrı ve ölçeklenebilir bir havuzda yürür.
Process Manager (pm) Modları
PHP-FPM havuzunun nasıl davranacağını pm direktifi belirler. Üç mod vardır:
| Mod | Davranış | Uygun Senaryo |
|---|---|---|
static | Sabit sayıda işçi her zaman açık | Yüksek ve istikrarlı trafik |
dynamic | İşçi sayısı yüke göre değişir | Çoğu site için varsayılan |
ondemand | İşçiler yalnızca istek gelince açılır | Düşük trafik, çok sayıda site |
pm.max_children Nasıl Hesaplanır?
En kritik ayar pm.max_children'dır — aynı anda kaç PHP isteğinin işlenebileceğini belirler. Bu değer çok düşükse istekler kuyruğa girer ve site yavaşlar; çok yüksekse bellek tükenir.
Pratik hesap şöyledir: PHP'ye ayırabileceğiniz belleği, tek bir PHP işçisinin ortalama bellek kullanımına bölün. Örneğin PHP için 2 GB ayırdıysanız ve her işçi ortalama 64 MB kullanıyorsa, max_children kabaca 30 civarı olmalıdır. Tek bir işçinin gerçek bellek kullanımını ps veya izleme araçlarıyla ölçebilirsiniz.
Nginx ile PHP-FPM'i Bağlama
Nginx, PHP isteklerini bir socket üzerinden PHP-FPM'e iletir. Tipik bir location bloğu şöyledir:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
unix:/run/php/...) aynı sunucuda TCP'ye göre biraz daha hızlıdır. Web sunucusu ve PHP-FPM ayrı makinelerdeyse TCP (127.0.0.1:9000) kullanılır.Yaygın PHP-FPM Hataları
- 502 Bad Gateway: PHP-FPM çalışmıyor ya da socket yolu yanlış.
systemctl status php8.3-fpmile kontrol edin. - 504 Gateway Timeout: PHP betiği çok uzun sürüyor;
max_execution_timeve Nginxfastcgi_read_timeoutdeğerlerine bakın. - İstekler kuyrukta bekliyor:
max_childrenyetersiz — bellek izin veriyorsa artırın. - Bellek tükeniyor:
max_childrençok yüksek; düşürün veya RAM yükseltin.
Sıkça Sorulan Sorular
Hangi pm modunu seçmeliyim?
Çoğu site için dynamic dengeli bir seçimdir. Trafiğiniz yüksek ve istikrarlıysa static daha öngörülebilir performans verir. Tek sunucuda çok sayıda düşük trafikli site varsa ondemand belleği korur.
PHP-FPM ayarını değiştirdim, nasıl etkinleştiririm?
Yapılandırma değişikliğinden sonra sudo systemctl reload php8.3-fpm çalıştırın. reload, mevcut istekleri kesmeden ayarları uygular.
OPcache'i de açmalı mıyım?
Evet. OPcache, derlenmiş PHP kodunu bellekte tutarak her istekte yeniden derlemeyi önler ve PHP performansını belirgin biçimde artırır — production'da mutlaka açık olmalıdır.
KEYDAL hosting çözümleriyle PHP-FPM ve OPcache en baştan optimize edilmiş bir altyapıda yayında olun. KEYDAL hosting çözümleri