PHP-FPM Nedir ve Neden Önemlidir?

PHP-FPM (FastCGI Process Manager), PHP betiklerinin yüksek performansla çalıştırılmasını sağlayan bir süreç yöneticisidir. Geleneksel CGI ve mod_php çözümlerine göre çok daha az bellek tüketir ve istek başına ayrı bir PHP süreci oluşturmak yerine önceden tanımlanmış işçi havuzları (worker pool) üzerinden çalışır. Bu sayede özellikle yüksek trafikli sitelerde yanıt süresi %30‑40 azalabilir.
PHP-FPM’in avantajları arasında dinamik işçi sayısı ayarlama, ayrı PHP sürümleri için farklı havuzlar tanımlama ve slowlog gibi hata izleme özellikleri bulunur. Ancak yanlış yapılandırılmış bir FPM, bellek sızıntılarına ve CPU aşırı yüküne neden olabilir; bu da kullanıcı deneyimini olumsuz etkileyerek dönüşüm oranlarını düşürür. Bu makalede, bu riskleri nasıl önleyeceğinizi ve performansı maksimize edeceğinizi adım adım göstereceğiz.
PHP-FPM’in Temel Konfigürasyon Dosyaları ve Nerede Bulunur?
PHP-FPM iki ana dosya üzerinden yönetilir: php-fpm.conf ve her havuz için ayrı www.conf (veya kullanıcı tanımlı başka bir isim). Çoğu Linux dağıtımında bu dosyalar /etc/php/7.4/fpm/ (versiyona göre değişir) dizininde bulunur. php-fpm.conf genel ayarları, www.conf ise işçi havuzunun detaylarını içerir.
Örneğin, www.conf içinde listen = /run/php/php7.4-fpm.sock satırı, PHP-FPM’in Nginx ile iletişim kurmak için Unix soketini kullandığını gösterir. Bu yapı, TCP üzerinden iletişime göre 30‑50 ms daha düşük gecikme sağlar. Aynı zamanda user ve group ayarları, işçilerin hangi sistem kullanıcısı altında çalışacağını belirler; bu da güvenlik açısından kritik bir adımdır.
İşçi Havuzu (Worker Pool) Ayarlarını Optimize Etmek
İşçi havuzu ayarları, PHP-FPM performansının kalbini oluşturur. En çok kullanılan parametreler pm, pm.max_children, pm.start_servers, pm.min_spare_servers ve pm.max_spare_servers’dır. pm değeri üç moddan birini alabilir: static, dynamic ve ondemand. Dinamik mod, çoğu senaryoda en dengeli seçimdir; çünkü işçi sayısını talebe göre artırıp azaltır.
Aşağıdaki tablo, üç modun temel özelliklerini ve önerilen kullanım durumlarını özetler:
| Mod | Özellik | Önerilen Kullanım |
|---|---|---|
| static | Tüm işçiler başlangıçta oluşturulur, sabit sayıda çalışır. | Düşük ve sabit trafik, kaynak sınırlı VPS. |
| dynamic | Başlangıçta bir grup işçi, talebe göre ölçeklenir. | Orta‑yük ve dalgalı trafik, VDS sunucu paketleri üzerinde ideal. |
| ondemand | İşçiler sadece istek geldiğinde yaratılır, boşta beklemez. | Yoğun gecikme toleransı olan API servisleri. |
Örnek bir www.conf ayarı şu şekildedir:
pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 24
Burada pm.max_children sunucunun toplam bellek kapasitesine göre belirlenir; her işçi yaklaşık 30‑40 MB bellek tüketir. 8 GB RAM bir VDS için max_children = 120 güvenli bir sınırdır.
PHP-FPM ve Nginx Entegrasyonu: En İyi Pratikler
Nginx, PHP-FPM ile birlikte en popüler web sunucularından biridir. En iyi performansı elde etmek için Nginx’in fastcgi_pass direktifini Unix soketi üzerinden yönlendirmek gerekir. Aşağıdaki örnek, nginx.conf içinde location ~ \.php$ bloğunu göstermektedir:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Bu yapı, TCP üzerinden yapılan bağlantılara göre %15‑20 daha az CPU tüketimi sağlar. Ayrıca fastcgi_buffers ve fastcgi_buffer_size ayarlarıyla yanıt tamponlamasını artırarak büyük veri setlerinde “upstream prematurely closed connection” hatalarını önleyebilirsiniz.
Sunucunuz WordPress hosting gibi CMS tabanlı ise, fastcgi_cache kullanarak statik HTML önbelleği oluşturmak, PHP-FPM üzerindeki yükü %70’e kadar azaltabilir.
PHP Ayarlarını (php.ini) İnce Ayarlarla Hızlandırmak

PHP-FPM’in işçi havuzu ayarları kadar php.ini dosyası da performans üzerinde büyük etkiye sahiptir. En kritik parametreler şunlardır:
- opcache.enable = 1 – OPCache, derlenmiş PHP kodunu bellekte tutarak tekrar derleme ihtiyacını ortadan kaldırır.
- opcache.memory_consumption = 256 – 256 MB OPCache belleği, orta ölçekli uygulamalarda yeterlidir.
- realpath_cache_size = 4096k – Dosya yolu önbelleği, dosya sistemine yapılan sorgu sayısını azaltır.
- max_execution_time = 30 – Uzun süren scriptlerin sunucuyu bloke etmesini önler.
- memory_limit = 256M – İşçi başına bellek sınırı; düşük bellek hatalarını engeller.
Bu ayarları /etc/php/7.4/fpm/php.ini dosyasına ekleyerek, PHP kodunun ortalamada %25 daha hızlı çalıştığını gözlemleyebilirsiniz. Ayrıca display_errors üretim ortamında kapalı olmalı; aksi takdirde gereksiz veri sızıntısı ve performans kaybı yaşanır.
Yük Dengeleme ve Çoklu Sunucu Ortamında PHP-FPM
Yüksek trafikli sitelerde tek bir PHP-FPM sunucusu yeterli olmayabilir. Bu durumda fiziksel sunucu (dedicated server) veya AMD Ryzen VDS sunucular kullanarak yatay ölçekleme yapılabilir. Nginx’in upstream blokları sayesinde birden fazla PHP-FPM örneği arasında istek dağıtabilirsiniz:
upstream php_fpm_pool {
server 10.0.0.11:9000 max_fails=3 fail_timeout=30s;
server 10.0.0.12:9000 max_fails=3 fail_timeout=30s;
}
Bu yapı, bir sunucuya gelen aşırı yükü diğerine aktararak kesişme süresini %50 azaltır. Ayrıca sticky parametresiyle aynı kullanıcı oturumunun aynı işçi üzerinde kalmasını sağlayabilirsiniz; bu, oturum verisi tutarlılığı için kritiktir.
Günlük (Log) Yönetimi ve Sorun Giderme
PHP-FPM’in error_log ve slowlog dosyaları, performans sorunlarını tespit etmek için vazgeçilmezdir. slowlog özelliği, belirli bir süreyi aşan scriptleri kaydederek “nerede yavaşladığınızı” gösterir. Örneğin:
slowlog = /var/log/php-fpm/$pool.slow.log
request_slowlog_timeout = 5s
Bu ayar, 5 saniyeden uzun süren istekleri $pool.slow.log dosyasına yazar. Logları grep ve awk gibi araçlarla analiz ederek, örneğin “veritabanı sorgusu 3 saniye sürdü” gibi spesifik problemleri hızlıca çözebilirsiniz. Ayrıca systemctl status php7.4-fpm komutu, hizmetin genel durumunu ve olası hataları gösterir.
Sıkça Sorulan Sorular
PHP-FPM nedir ve Apache ile farkı nedir?
PHP-FPM, FastCGI protokolü üzerinden PHP betiklerini çalıştıran bir süreç yöneticisidir. Apache’nin mod_php modülü ise PHP’yi doğrudan Apache iş parçacığı içinde çalıştırır. FPM, ayrı işçi havuzları sayesinde bellek ve CPU kullanımını daha verimli yönetir; bu da yüksek trafikli sitelerde daha düşük yanıt süresi demektir.
Dynamic ve Ondemand modları arasındaki fark nedir?
Dynamic mod, belirli bir işçi sayısı aralığında (min‑max) ölçeklenirken, Ondemand mod işçi oluşturmayı sadece istek geldiğinde yapar ve kullanılmadığında kapatır. Ondemand, düşük trafikli API’lerde enerji tasarrufu sağlar; Dynamic ise dalgalı trafiğe sahip web sitelerinde daha dengeli performans sunar.
OPCache ne işe yarar ve ne kadar bellek ayırmalıyım?
OPCache, PHP betiklerini derlenmiş opcode’lar olarak bellekte saklar, böylece her istek için yeniden derleme yapılmaz. Ortalama bir WordPress sitesinde 128‑256 MB OPCache yeterlidir; daha büyük uygulamalarda 512 MB’a kadar çıkmak gerekebilir.
PHP-FPM’i birden fazla sunucuya nasıl dağıtabilirim?
Nginx’in upstream bloklarını kullanarak birden fazla PHP-FPM sunucusuna istek yönlendirebilirsiniz. Her sunucu aynı PHP sürümüne ve aynı php.ini ayarlarına sahip olmalı; böylece oturum tutarlılığı ve kod uyumluluğu sağlanır.
Gerçek Dünya Senaryosu: E‑Ticaret Sitesi Performans Artışı
Bir e‑ticaret sitesinin e-ticaret hosting paketinde PHP‑FPM yapılandırması yapılmadan önce ortalama sayfa yükleme süresi 4,2 saniyeydi. Yapılan optimizasyonlar:
- Dynamic moduna geçiş ve
pm.max_children150’ye yükseltildi. - OPCache bellek limiti 256 MB’a çıkarıldı.
- FastCGI tamponları artırıldı (
fastcgi_buffers 16 16k). - Slowlog ile 5 s üzeri sorgular tespit edilip veritabanı indeksleri iyileştirildi.
Sonuç: Ortalama yanıt süresi 2,5 saniyeye düştü, CPU kullanım oranı %30 azaldı ve alışveriş tamamlama oranı %12 yükseldi. Bu örnek, doğru PHP-FPM ayarlarının iş dönüşümüne doğrudan etkisini gösteriyor.
Sonuç ve Bir Sonraki Adımınız
PHP-FPM yapılandırması ve optimizasyonu, sadece teknik bir detay değil, web sitenizin rekabet gücünü artıran stratejik bir adımdır. Yukarıdaki adımları uygulayarak CPU, bellek ve yanıt süresi üzerinde gözle görülür iyileşmeler elde edebilirsiniz. Şimdi, sunucunuzda php-fpm.conf ve www.conf dosyalarını inceleyin, OPCache’ı etkinleştirin ve işçi havuzunu trafiğinize göre yeniden boyutlandırın.
Eğer daha fazla kaynak ve uzman desteği arıyorsanız, Intel i9 VDS sunucular yüksek çekirdek sayısı sayesinde PHP‑FPM işçilerinizi sorunsuz çalıştırabilir. Unutmayın, performans iyileştirmeleri sürekli izleme ve ayarlama gerektirir; bu yüzden düzenli olarak slowlog ve systemctl status php-fpm çıktısını kontrol edin.
Bu makaleyi okuduktan sonra, PHP‑FPM’i hemen yapılandırarak sitenizin hızını artırın ve kullanıcı memnuniyetini yükseltin. Başarılar!