PHP-FPM ile PHP Performans Optimizasyonu: Ayar, İzleme ve En İyi Uygulamalar

PHP-FPM ile PHP Performans Optimizasyonu: Ayar, İzleme ve En İyi Uygulamalar - Corelux
19 Mar 2026
Paylaş:

PHP-FPM ile PHP Performans Optimizasyonu: Ayar, İzleme ve En İyi Uygulamalar

Son Güncelleme: Mart 2026

PHP-FPM (FastCGI Process Manager - HızlıCGI Süreç Yöneticisi) ile PHP uygulamalarınızın performansını artırmak, bellek kullanımını kontrol etmek ve istekleri daha verimli yönetmek mümkündür. Bu rehberde PHP-FPM ayarları, pm türleri, izleme yöntemleri ve pratik optimizasyon senaryoları adım adım ele alınacaktır.

İçindekiler

PHP-FPM Nedir?

PHP-FPM, PHP için bir process manager (süreç yöneticisi) olup, web sunucularından (ör. Nginx veya Apache) gelen PHP isteklerini yönetir. PHP-FPM, pool (havuz) kavramı ile istekleri izole eder, bellek ve işlemci (CPU) kaynaklarını kontrol eder ve daha stabil bir çalışmayı sağlar.

Temel faydalar:

  • Performans: Kalıcı PHP süreçleri ile her istek için PHP yorumlayıcısını yeniden başlatma ihtiyacını azaltır.
  • İzolasyon: Farklı uygulamalar için ayrı pool tanımlanabilir.
  • Ölçeklenebilirlik: pm ayarları ile eşzamanlı istek kapasitesi ayarlanabilir.

PHP-FPM Temel Ayarları ve Parametreleri

PHP-FPM konfigürasyon dosyaları genellikle /etc/php/*/fpm/pool.d/ veya /etc/php-fpm.d/ dizinlerinde bulunur. Her pool için ayrı bir .conf dosyası oluşturulur. En önemli parametreler:

  • pm: Süreç yönetim modu (static, dynamic, ondemand).
  • pm.max_children: Havuzdaki maksimum PHP çocuk süreci sayısı.
  • pm.start_servers: (dynamic) Başlangıçta açılacak süreç sayısı.
  • pm.min_spare_servers: (dynamic) Minimum boş (idle) süreç sayısı.
  • pm.max_spare_servers: (dynamic) Maksimum boş süreç sayısı.
  • pm.max_requests: Bir süreç tarafından işlenecek maksimum istek sayısı (memory leak önlemi için önemlidir).
  • request_terminate_timeout: Uzun süren istekleri sonlandırma süresi.
  • listen: PHP-FPM dinleme adresi (unix socket veya ip:port).

PM Modları ve Kullanım Örnekleri

pm parametresi üç farklı moda sahiptir. Hangi modun ne zaman tercih edileceğine dair kısa açıklamalar:

  • static: Sabit sayıda süreç her zaman çalışır. Bellek tahmini kolaydır; yüksek trafikli, öngörülebilir yüklerde tercih edilir.
  • dynamic: Süreç sayısı yük durumuna göre artıp azalır. Genel amaçlı siteler için uygundur.
  • ondemand: İstek geldiğinde süreç oluşturur, belirli süre idle kalırsa kapatır. Bellek kısıtlı paylaşımlı ortamlarda avantajlıdır.

pm.max_children Hesaplama Örnekleri

En kritik ayarlardan biri pm.max_children değeridir. Basit bir hesaplama yöntemi:

  1. Toplam kullanılabilir bellek: Sunucunuzda PHP için ayırabileceğiniz bellek miktarını belirleyin (ör. 8 GB = 8192 MB).
  2. Sunucu işletim sistemi ve diğer servisler için ayırma: Sistem ve diğer servisler için bellek çıkarın (ör. 2 GB = 2048 MB).
  3. PHP başına ortalama bellek kullanımı: Bir PHP-FPM sürecinin ortalama bellek kullanımını ölçün (ör. 60 MB).
  4. Hesaplama: floor((kalan_bellek_MB) / (ortalama_process_MB))

Örnek hesap:

  • Toplam bellek: 8192 MB
  • Sistem için ayrılan: 2048 MB
  • Kalan PHP için: 6144 MB
  • Ortalama process: 60 MB
  • pm.max_children: floor(6144 / 60) = 102

Bu hesaplamaya göre pm.max_children=102 makul bir başlangıç noktasıdır. Ancak gerçek trafik koşullarında pm.max_requests ve request_terminate_timeout ile birlikte test edilmelidir.

Unix Socket vs TCP: Hangisi Seçilmeli?

PHP-FPM ile web sunucusu arasındaki bağlantı ya unix socket (ör. /run/php/php8.1-fpm.sock) ya da TCP (127.0.0.1:9000) üzerinden gerçekleşir. Karar verirken dikkat edilecek noktalar:

  • Unix Socket: Genellikle daha hızlı ve düşük gecikme sağlar; aynı sunucuda çalışan Nginx/Apache için tercih edilir.
  • TCP: Eğer PHP-FPM başka bir sunucuda (ör. ayrı bir VPS veya Kiralık Sunucu) çalışıyorsa veya yük dengeleme (load balancing) senaryosu varsa TCP tercih edilebilir.

Özet Tablo: Ayar Karşılaştırmaları

Parametre Kısa Açıklama Önerilen Senaryo
pm=max_children Maksimum PHP süreç sayısı Yüksek trafikli web uygulamaları; bellek hesaplaması ile belirlenir
pm=start_servers Başlangıçta çalışacak süreç sayısı (dynamic) Düşük gecikme istenen uygulamalar
pm=ondemand Süreçler talep üzerine oluşturulur Bellek kısıtlı paylaşımlı hosting
pm.max_requests Her sürecin işleyebileceği istek adedi Memory leak riskine karşı koruma
listen (socket/tcp) PHP-FPM dinleme adresi Aynı sunucu: unix socket; uzak sunucu: tcp

İzleme, Loglama ve Sorun Giderme

Performans sorunlarını tespit etmek için düzenli izleme gereklidir. Önerilen yöntemler:

  • Top/htop/ps: Anlık süreç ve bellek kullanımı için temel araçlar.
  • systemctl & journalctl: PHP-FPM servis durumu ve hata kayıtları (ör. journalctl -u php8.1-fpm).
  • PHP-FPM slowlog: Uzun süren istekleri kaydetmek için pool konfigürasyonunda slowlog ve request_slowlog_timeout tanımlayın.
  • Log dosyası yolları: Dağıtıma göre değişir; yaygın yerler /var/log/php-fpm.log veya /var/log/php8.1-fpm.log olabilir.
  • Apm ve izleme: New Relic, Datadog veya açık kaynak Prometheus + Grafana ile metrik toplayın.

Örnek sorun giderme adımları:

  1. CPU veya bellek spike varsa: Hangi PHP süreçlerinin yüksek bellek kullandığını ps veya top ile tespit edin.
  2. Slowlog kayıtları: Uzun süren isteklerin kaynak kodunu inceleyin (ör. yavaş SQL sorguları, dış servis çağrıları).
  3. pm.max_requests arttırma/azaltma: Memory leak (bellek sızıntısı) şüphesinde pm.max_requests değeri ile süreç yenilenmesini sağlayın.
  4. Graceful reload: Konfig değişikliklerinden sonra systemctl reload phpX.Y-fpm komutu kullanarak kesinti minimize edilir; tam restart gerekiyorsa systemctl restart kullanın.

Pratik Senaryolar ve Örnek Tuning Örnekleri

Aşağıda birkaç yaygın sunucu senaryosu için başlangıç ayarları ve notlar yer almaktadır. Her örnek varsayımsal değerler içerir ve canlı ortamda test edilmelidir.

  • Senaryo: Paylaşılan hosting (bellek kısıtlı): pm=ondemand, pm.max_children=20, pm.process_idle_timeout=10s, pm.max_requests=500 — avantaj: düşük bellek kullanım, dezavantaj: ilk isteklerde gecikme olabilir.
  • Senaryo: Orta ölçekli VPS (4 GB RAM): pm=dynamic, pm.start_servers=4, pm.min_spare_servers=2, pm.max_spare_servers=6, pm.max_children≈50 (ortalama process 60 MB kabul edilerek hesaplanmalı), pm.max_requests=1000.
  • Senaryo: Yüksek trafikli uygulama (8+ GB RAM): pm=static, pm.max_children=150 (hesaplanmış bellek doğrultusunda), pm.max_requests=2000, listen = unix:/run/php/php8.1-fpm.sock, request_terminate_timeout=30s.

Not: Bu örneklerde opcache (opcode cache) ile birlikte kullanıldığında bellek kullanım profili değişir; opcache ile birlikte script yükleme maliyeti azalır ve ortalama süreç bellek kullanımı düşebilir.

Corelux Hizmetlerine Yönlendirme

PHP-FPM optimizasyonu ve testleri için kaynak sunucu gereksinimi ya da taşıma ihtiyaçlarınız varsa Corelux'un sunduğu hizmetleri inceleyebilirsiniz:

  • Türkiye VPS Sunucu — Hızlı test ve containerless uygulama deployları için uygundur.
  • Türkiye VDS Sunucu — İzole kaynak ve yüksek erişilebilirlik gerektiren uygulamalar için.
  • Kiralık Sunucu — Tam donanım kontrolü ve yüksek bellek gereksinimleri için.
  • SSL Sertifikası — TLS/HTTPS optimizasyonu ve güvenli bağlantı için.
  • Yedekleme Hizmeti — Konfig değişikliklerinden önce snapshot (anlık görüntü) almak için.

Sıkça Sorulan Sorular

pm.max_children nasıl hesaplanır?

pm.max_children hesaplaması için: kalan_bellek_MB / ortalama_php_process_MB formülünü kullanın. Kalan belleği belirlerken sistem ve diğer servisler için rezerv bırakmayı unutmayın.

pm=ondemand performansı düşürür mü?

pm=ondemand bellek tasarrufu sağlar ancak soğuk başlangıç (cold start) nedeniyle ilk istekte gecikme olabilir. Düşük trafik ve bellek sınırlı ortamlar için uygundur.

Unix socket kullanmalı mıyım yoksa TCP mi?

Aynı sunucu içindeyse unix socket genellikle daha hızlıdır. Eğer PHP-FPM farklı bir sunucuda çalışacaksa veya yük dengeleyici üzerinden erişiliyorsa TCP tercih edin.

pm.max_requests neden önemli?

pm.max_requests bellek sızıntılarına (memory leak) karşı prosesleri belli istekten sonra yeniden başlatarak sistemi stabil tutar. Uzun süreli çalışan süreçlerde tavsiye edilir.

Değişikliklerden sonra nasıl uygulama yapmalıyım?

Konfigürasyon değişikliğinden sonra önce systemctl reload php-fpm (dağıtıma göre phpX.Y-fpm) ile graceful reload deneyin. Sorun olursa tam restart yapın. Canlı trafiğe müdahale ederken yedek almayı unutmayın.

Sonuç

Doğru PHP-FPM ayarları, sunucunuzun kaynak kullanımını dengeleyerek uygulama performansını ve kararlılığını önemli ölçüde artırır. Başlangıçta bellek tahmini ve gerçek trafik testleri ile pm.max_children, pm modu ve pm.max_requests gibi değerleri belirleyin. İleri seviye izleme için Prometheus + Grafana gibi çözümler önerilir.

Corelux olarak, test, taşıma veya yüksek performanslı altyapı ihtiyaçlarınız için Türkiye VPS Sunucu, Türkiye VDS Sunucu veya Kiralık Sunucu çözümlerimizi değerlendirebilirsiniz. Konfigürasyon değişikliklerinden önce Yedekleme Hizmeti kullanarak geri dönüş planı oluşturmanızı öneririz.

Eğer özel bir senaryonuz varsa, gerekli bellek ve işlemci değerlerinizi paylaşın; size özel bir başlangıç konfigürasyonu hazırlayalım.

Yazar

Boran BAR

Chat on WhatsApp