PHP-FPM “ondemand” vs “dynamic” – Hangisi Daha Hızlı, Hangisini Ne Zaman Kullanmalı?

PHP-FPM (FastCGI Process Manager), PHP uygulamalarını çalıştırmanın en yaygın ve performanslı yollarından biridir.

FPM, process manager adını verdiği bir yapı ile PHP süreçlerini yönetir.

Bu yapının çalışma şekli üç farklı modla belirlenir: static, dynamic ve ondemand.

Bu yazıda dynamic ve ondemand modlarını karşılaştıracak, hız farklarını ve kullanım senaryolarını açıklayacağız.

1. Process Manager Mantığı

PHP-FPM, gelen HTTP isteklerini işlemek için worker süreçleri oluşturur.

Bu süreçler:

  • Önceden hazırlanıp bekletilebilir (dynamic)
  • İstek geldiğinde oluşturulabilir (ondemand)

Seçtiğiniz mod, bellek kullanımı, yanıt süresi ve yük altındaki performans üzerinde doğrudan etkilidir.

2. Dynamic Mod

Nasıl Çalışır?

  • FPM başlarken belirli sayıda worker process hazır başlatılır.
  • pm.start_servers ile başlangıçtaki worker sayısı belirlenir.
  • Yük arttıkça, pm.max_spare_servers değerine kadar yeni process eklenir.
  • Yük azaldığında, pm.min_spare_servers değerine kadar düşer.

Örnek Ayar:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

Avantajları

  • Hızlı ilk yanıt: Worker’lar önceden hazır olduğu için ilk isteklerde “ısınma” beklenmez.
  • Trafiğin dalgalandığı sitelerde daha stabil.

Dezavantajları

  • Bellek tüketimi daha yüksek: Boşta bekleyen worker’lar RAM kullanmaya devam eder.
  • Az trafikli sitelerde kaynak israfına yol açabilir.

3. Ondemand Mod

Nasıl Çalışır?

  • FPM başlarken hiç worker başlatılmaz.
  • İstek geldiğinde process oluşturulur.
  • Process, pm.process_idle_timeout süresi boşta kaldığında kapatılır.

Örnek Ayar:

pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 10s

Avantajları

  • Düşük bellek kullanımı: Trafik yokken PHP process çalışmaz.
  • Çok az kullanılan veya nadiren erişilen sitelerde ideal.

Dezavantajları

  • İlk istek gecikmesi: Worker yoksa PHP sürecinin başlatılması ekstra gecikme yaratır.
  • Trafik ani artış gösterirse process başlatma yükü CPU’yu zorlayabilir.
ÖzellikDynamicOndemand
İlk istek süresiDaha hızlı (hazır process var)Biraz yavaş (process açılır)
Bellek kullanımıDaha yüksekDüşük
Yük altı performansıKararlı, stabilYoğun trafikte başlatma yükü fazla
En uygun senaryoOrta/Yüksek trafikDüşük/seyrek trafik

Özet:

  • Dynamic = hız öncelikli, bellek ikinci planda.
  • Ondemand = bellek tasarrufu öncelikli, hız ikinci planda.

5. Hangi Durumda Hangisini Seçmeli?

  • Dynamic
    • Trafiğin sürekli olduğu e-ticaret siteleri
    • API servisleri
    • Ortalama ve yüksek yük altında çalışan PHP uygulamaları

  • Ondemand
    • Trafiği düşük kurumsal tanıtım siteleri
    • Yönetim panelleri (admin) gibi az kullanılan sayfalar
    • Paylaşımlı hosting veya çok site barındıran ama her biri düşük trafikli sunucular

6. Ek İpuçları (Performans İçin)

  • OPcache aktif edin – PHP kodunu bellekte derlenmiş tutar, process başlatma maliyetini azaltır.
  • pm.max_children değerini RAM’e göre belirleyin (her process ~30–50 MB RAM kullanabilir).
  • pm.status_path ile FPM istatistiklerini izleyin, gereksiz process ayarlarını optimize edin.
  • Nginx veya Apache ile Keep-Alive ayarlarını dengeleyin, aşırı process kuyruğunu engelleyin.

Sonuç

  • Dynamic, hız isteyenler için; ondemand, RAM tasarrufu isteyenler için daha iyi.
  • Doğru seçim, uygulamanın trafik profiline göre yapılmalı.
  • Yüksek trafikli sistemlerde dynamic, düşük trafikli sistemlerde ondemand ile ciddi kaynak tasarrufu sağlanabilir.