PHP tabanlı web sitelerinde ziyaretçi isteğinin hızlı işlenmesi yalnızca uygulama koduna bağlı değildir. Web sunucusunun PHP dosyalarını hangi yöntemle çalıştırdığı, aynı anda karşılanabilecek istek sayısını ve kaynak kullanımını doğrudan etkiler. Özellikle WordPress, WooCommerce ve özel PHP uygulamalarında doğru işlem yönetimi yapılmadığında yoğun trafik sırasında gecikmeler veya geçici erişim sorunları yaşanabilir. Bu rehberde PHP-FPM nedir, nasıl çalışır, web sitesi performansını nasıl etkiler ve yapılandırılırken nelere dikkat edilmelidir sorularını ele alıyoruz.

PHP-FPM Nedir?
PHP-FPM, FastCGI Process Manager ifadesinin kısaltmasıdır. PHP isteklerini çalıştıran işçi süreçleri merkezi olarak yöneten bir FastCGI uygulamasıdır. Nginx ve Apache gibi web sunucularıyla birlikte kullanılabilir.
PHP-FPM; gelişmiş süreç yönetimi, farklı kullanıcı ve ayarlarla çalışabilen havuzlar, yavaş istek günlüğü ve durum bilgisi gibi özellikler sunar. Bu yapı, her web projesi için ayrı kaynak ve çalışma kuralları tanımlanmasına olanak verir.

PHP-FPM Nasıl Çalışır?
Bir ziyaretçi PHP dosyası istediğinde web sunucusu isteği doğrudan çalıştırmak yerine FastCGI bağlantısı üzerinden PHP-FPM’e iletir. Bağlantı Unix soketi veya TCP portu kullanılarak kurulabilir. İlgili havuzdaki uygun işçi süreç PHP kodunu yürütür ve oluşan yanıtı web sunucusuna geri gönderir. HTML çıktısı daha sonra ziyaretçinin tarayıcısına ulaştırılır.
PHP-FPM ana süreç ve işçi süreçlerden oluşur. Ana süreç havuz yapılandırmalarını yönetir; işçiler ise gelen PHP isteklerini işler. Hazır süreçlerin bulunması, her bağlantı için baştan yeni bir PHP çalışma ortamı oluşturulmasına ihtiyaç bırakmaz. Aynı anda çalışabilecek istek sayısı, havuza ayrılan işçi kapasitesiyle sınırlıdır.

PHP-FPM Web Sitesi Performansını Nasıl Etkiler?
Doğru yapılandırılmış PHP-FPM, eş zamanlı isteklerin düzenli biçimde işlenmesini ve sunucu kaynaklarının kontrollü kullanılmasını sağlar. Trafik arttığında uygun sayıda işçinin hazır bulunması, PHP isteklerinin bekleme süresini azaltabilir. Birden fazla web sitesi barındırılan sunucularda ayrı havuz kullanılması, tek bir projenin bütün PHP kapasitesini tüketmesini önlemeye yardımcı olur.
PHP-FPM tek başına yavaş bir uygulamayı hızlandırmaz. Verimsiz veritabanı sorguları, ağır eklentiler, harici API gecikmeleri ve optimize edilmemiş PHP kodu işlem süresini uzatmaya devam eder. FPM ayarlarının görevi mevcut kaynakları dengeli dağıtmak ve isteklerin çalışma biçimini yönetmektir.

PHP-FPM Süreç Yönetimi Modları Nelerdir?
PHP-FPM havuzlarında static, dynamic ve ondemand olmak üzere üç süreç yönetimi modu bulunur. Seçim yapılırken trafik düzeni, kullanılabilir bellek ve beklenen yanıt süresi dikkate alınmalıdır.
- Static:
pm.max_childrenile belirlenen sayıda işçi sürekli açık tutulur. Düzenli ve yüksek trafik altında tutarlı tepki süresi sağlayabilir ancak boşta kalan süreçler de bellek kullanır. - Dynamic: Başlangıçta belirli sayıda işçi oluşturur ve aktif yoğunluğa göre süreç sayısını sınırlar içinde artırıp azaltır. Değişken ziyaretçi trafiği bulunan projelerde performans ile kaynak tüketimi arasında denge kurar.
- Ondemand: İşçiler yalnızca yeni istek geldiğinde başlatılır ve belirlenen boşta kalma süresinden sonra kapatılır. Düşük trafikli sitelerde bellek tasarrufu sağlar fakat uyuyan havuzun ilk isteğinde kısa bir süreç oluşturma gecikmesi yaşanabilir.
Önemli PHP-FPM Ayarları Nelerdir?
pm.max_children, bir havuzun aynı anda çalıştırabileceği en yüksek PHP isteği sayısını belirler. Değer düşük tutulursa bütün işçiler meşgul olduğunda yeni istekler kuyrukta bekler. Sunucunun kaldırabileceğinden yüksek bir sınır ise bellek tüketimini artırarak takas alanı kullanımına, işlem yavaşlamasına veya süreçlerin işletim sistemi tarafından sonlandırılmasına yol açabilir.
Dynamic modda pm.start_servers, başlangıçta açılacak işçileri; pm.min_spare_servers ve pm.max_spare_servers boşta bekleyecek süreç aralığını yönetir. Ondemand seçeneğinde pm.process_idle_timeout, kullanılmayan işçinin ne zaman kapatılacağını belirler. pm.max_requests ise bir işçinin belirtilen sayıda isteği tamamladıktan sonra yeniden oluşturulmasını sağlayarak üçüncü taraf kütüphanelerdeki olası bellek sızıntılarının etkisini sınırlayabilir.
Uygun pm.max_children değeri sabit bir sayıdan kopyalanmamalıdır. İşletim sistemi, web sunucusu ve veritabanı için gerekli bellek ayrıldıktan sonra kalan kapasite, gerçek PHP işçilerinin ortalama bellek tüketimine göre hesaplanmalıdır. Yoğun saatlerde yapılan ölçümler, tahmine dayalı ayarlardan daha güvenilir sonuç verir.

PHP-FPM Havuzları Neden Kullanılır?
Havuzlar, aynı sunucudaki PHP uygulamalarına farklı kullanıcı, grup, soket ve PHP ayarları tanımlamayı sağlar. Böylece domainadresiniz.com için çalışan süreçler diğer projelerin işçilerinden ayrılabilir. Bir sitedeki trafik artışı veya hatalı kod, doğru sınırlar uygulandığında başka bir sitenin kaynaklarını daha az etkiler.
Her havuz için ayrı yavaş istek günlüğü ve çalışma sınırı belirlemek sorun tespitini kolaylaştırır. Soket izinlerinin web sunucusuyla uyumlu olmaması veya yanlış bağlantı yolunun kullanılması ise 502 Bad Gateway hatasına neden olabilir. Bu nedenle havuz oluşturulduktan sonra kullanıcı, grup ve dinleme ayarları birlikte kontrol edilmelidir.

PHP-FPM Performansı Nasıl Optimize Edilir?
Optimizasyona başlamadan önce işlemci kullanımı, boş bellek, istek süresi ve PHP-FPM kuyruğu ölçülmelidir. Kapasite sorunu varsa süreç sınırları kontrollü biçimde değiştirilip gerçek trafik veya yük testi altında sonuçlar karşılaştırılmalıdır. Ayarları tek seferde büyük oranlarda yükseltmek sorunun kaynağını gizleyebilir.
PHP kodunun her istekte yeniden ayrıştırılmasını azaltmak için OPcache etkinleştirilebilir. OPcache, önceden derlenmiş betik bayt kodunu paylaşımlı bellekte saklar. Bu özellik PHP-FPM’den ayrı çalışır ancak ikisi birlikte kullanıldığında işlemci yükünün azaltılmasına katkı sağlayabilir.
Yavaş sorguların ve uzun süren betiklerin ayrıca incelenmesi gerekir. request_slowlog_timeout ile slowlog yapılandırması, belirli sürenin üzerinde çalışan PHP isteklerinin tespit edilmesini kolaylaştırır. Uygulama önbelleği, veritabanı indeksleri, tema ve eklenti yapısı da ölçüm sonuçlarına göre optimize edilmelidir.

PHP-FPM Durumu Nasıl İzlenir?
pm.status_path ayarıyla etkinleştirilen durum sayfası; aktif ve boşta bekleyen işçileri, istek kuyruğunu, ulaşılan en yüksek süreç sayısını ve yavaş istekleri gösterebilir. Bu alan istek adresleri ile kaynak bilgilerini açığa çıkarabileceği için yalnızca yerel ağdan veya güvenilir IP adreslerinden erişilebilir tutulmalıdır.
listen queue değerinin sürekli yükselmesi veya max children reached sayacının artması kapasite sınırına ulaşıldığını gösterebilir. Bellek ve işlemci kullanımıyla birlikte değerlendirilen bu veriler, süreç sayısının mı artırılması gerektiğini yoksa uygulama tarafında bir darboğaz mı bulunduğunu anlamaya yardımcı olur.
Sonuç
PHP-FPM, PHP isteklerini ayrı süreç havuzları üzerinden yöneten ve sunucu kaynaklarının planlı kullanılmasını sağlayan önemli bir bileşendir. Doğru süreç modunun seçilmesi, işçi sayısının gerçek bellek tüketimine göre belirlenmesi ve kuyruk verilerinin izlenmesi yoğunluk altında daha kararlı yanıt süreleri elde edilmesine yardımcı olur. Kalıcı performans iyileştirmesi için FPM yapılandırması; OPcache, uygulama kodu ve veritabanı optimizasyonuyla birlikte ele alınmalıdır.

Domainhizmetleri olarak hızlı, güvenli ve stabil hosting altyapımızla web projelerinize uygun çözümler sunuyoruz. PHP tabanlı web siteleriniz için ihtiyaçlarınıza uygun hosting hizmetlerimizden yararlanarak daha verimli, kararlı ve yüksek performanslı bir yayın ortamı oluşturabilirsiniz.




