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:

ModDavranışUygun Senaryo
staticSabit sayıda işçi her zaman açıkYü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ırDüşü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;
}
İpucu
Unix socket (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-fpm ile kontrol edin.
  • 504 Gateway Timeout: PHP betiği çok uzun sürüyor; max_execution_time ve Nginx fastcgi_read_timeout değerlerine bakın.
  • İstekler kuyrukta bekliyor: max_children yetersiz — 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.

PHP Siteleriniz İçin Hızlı Sunucu

KEYDAL hosting çözümleriyle PHP-FPM ve OPcache en baştan optimize edilmiş bir altyapıda yayında olun. KEYDAL hosting çözümleri

WhatsApp