Eğer sunucunuzda hala eski moda mod_php veya CGI kullanıyorsanız, siteniz her WordPress girişinde yeniden bir PHP motoru (process) oluşturarak RAM'i bitiriyordur. Gelin, saniyede binlerce PHP isteğini donmadan eritebilen PHP-FPM (FastCGI Process Manager) teknolojisini ve kritik pool ayarlarını konuşalım.
PHP-FPM Nedir ve Neden Hayatidir?
FPM (FastCGI Process Manager), ağır hit alan web siteleri için PHP işlemcisinin modern, bağımsız ve havuz (pool) mantığıyla çalışan gelişmiş bir versiyonudur.
Eski Sistem (mod_php): Apache sunucusu 100 ziyaretçi bağlandığında, hepsine cevap vermek için kendi içine gömülü olan PHP yorumlayıcısının 100 tane tam kopyasını oluşturur. RAM hızla tükenir.
Yeni Sistem (PHP-FPM): FPM, arka planda çalışan ayrı bir Linux servisidir. Kendi içinde hazır bekleyen (Örn: 20 adet) PHP "İşçi" havuzu (worker pool) bulundurur. Nginx veya Apache ne zaman PHP kodu çalıştıracak olsa, bu kodları kuyruğa koyup FPM'deki işçilere yaptırır. İşçi işi bitince ölmez, yeni gelecek görev için havuza geri döner tatile çıkar.
FPM Process Manager (PM) Türleri
FPM yapısının kalbi, havuzdaki işçilerin nasıl oluşturulacağını belirleyen algoritmalardır. php-fpm.d/www.conf dosyasında ayarlanırlar.
- pm = static (Sabit İşçi): Ana işçi sayısı başlatmada yaratılır ve hiç değişmez. (Örn: Hep 50 işçi). RAM'iniz çok bolsa (8GB+) muzzam hızlıdır, çünkü yeni işçi yaratmak için CPU harcanmaz.
- pm = dynamic (Dinamik): Yoğunluğa göre işçi sayısı artar veya azalır. Yeni işçi yaratma işlemi sırasında sunucuda ufak bir gecikme (spawn latency) olabilir. Genellikle çoğu sunucuda varsayılan ayarlardır (Min: 5, Max: 50).
- pm = ondemand (Talebe Göre): Normalde sıfır işçi bekler. İlk ziyaretçi gelince işçi doğar, belli bir süre boş kalınca ölür. Düşük RAM'li sunucularda (1GB VPS) çok idealdir.
Altın Kurallar: Pool Ayarları Nasıl Yapılır?
Ortalama 4 Çekirdek ve 8GB RAM bir VDS için, Dynamic türünde bir FPM havuzu ayarı (/etc/php/8.1/fpm/pool.d/www.conf) şöyle olmalıdır:
# pm ayarını dinamik yapıyoruz (Genel kullanım için en ideali)
pm = dynamic
# Ani trafik (DDoS veya Kampanya) gelirse maksimum açılacak PHP işçi sayısı
# (Bunu çok artırırsanız İşçiler RAM'i yer ve sunucu Out Of Memory olup çöker!)
pm.max_children = 120
# Sunucu yeni açıldığında hazır bekleyen işçi
pm.start_servers = 15
# Gece saatleri ziyaretçi yokken havuzda boşta asgari bekleyecek işçi (yedek kulübesi)
pm.min_spare_servers = 10
# Maksimum boş bekleyecek işçi (Fazlası doğmuşsa ölür, RAM'i boşa çıkarır)
pm.max_spare_servers = 30
# Memory Leaks (Bellek Sızıntısı - Kapatılmayan WP Eklentileri hantallığı)
# yüzünden şişen bir işçi, 500 talebi karşıladıktan sonra kendini öldürüp yenilensin.
pm.max_requests = 500
🚀 HazalHost LSPHP Avantajı
PHP-FPM her ne kadar hızlı olsa da, HazalHost'un kullandığı LiteSpeed LSAPI teknolojisi testlerde PHP-FPM'i de %50 oranında geride bırakmıştır! LSCache teknolojisiyle entegre bu altyapıyı VDS maliyetleri olmadan Web Hosting paketlerimizde güvenle deneyimleyin.
Kritik Hata: "max_children" Değerini Rastgele Girmek
Birçok webmaster max_children = 900 gibi devasa rakamlar girerek sitenin hızlanacağını sanır. Fakat 1 adet PHP process'i ortalama (WordPress eklentilerine göre) 30 MB - 60 MB RAM tüketir. 900 işçi x 50MB = 45.000 MB (45 GB) RAM demektir! Eğer sunucunuz 8GB ise, 150 işçi doğduğunda RAM tükenir ve sunucunuz kilitlenir (Crash ping down).
Sonuç
Sunucunuzun "htop" komutu üzerinden Ram Tüketimine bakın. Boş RAM'inizi tespit edin ve ortalama bir PHP Process'inin 50MB yiyeceğini hesaplayarak pm.max_children limitini doğru belirleyin, yavaşlığın kesin olarak çözüldüğünü göreceksiniz.