Sunucunuzun RAM miktarına ve ortalama PHP işlem boyutuna göre optimum php-fpm.conf parametrelerini hesaplar. Sonuçlar kopyalamaya hazır yapılandırma bloğu olarak çıktı verir.
$ ps --no-headers -o "rss,cmd" -C php-fpm | awk '{sum+=$1; count++} END {printf "Ortalama: %.1f MB\n", sum/1024/count}'$ ps --no-headers -o "rss" -C php-fpm | awk '{sum+=$1} END {printf "Toplam: %.0f MB\n", sum/1024}'
42.5 MB) aşağıdaki “Ortalama PHP İşlem Boyutu” alanına girin.
Sunucu yeni kuruluysa uygulamaya göre tahmin edin: WordPress ≈ 40–80 MB, Laravel ≈ 30–60 MB, düz PHP ≈ 10–30 MB.
Sunucunun toplam fiziksel RAM’i. free -m ile öğrenin.
Yukarıdaki komutu çalıştırıp çıkan değeri girin.
Çoğu site için dynamic önerilir.
Nginx, MySQL, OS için ayrılacak alan.
Birden fazla site varsa artırın.
PHP-FPM Nedir? Nasıl Çalışır?
PHP-FPM (FastCGI Process Manager), PHP isteklerini işleyen bağımsız bir süreç yöneticisidir. Nginx veya Apache’nin PHP dosyalarını çalıştırması için PHP-FPM’e istek yönlendirmesi gerekir. Her gelen istek için bir worker (child process) görevlendirilir; bu worker işi bitirene kadar meşguldür.
Temel Hesaplama Formülü
Kullanılabilir RAM = Toplam RAM - OS RAM pm.max_children = Kullanılabilir RAM ÷ Ortalama İşlem Boyutu pm.start_servers = max_children × 0.25 pm.min_spare_servers = max_children × 0.15 pm.max_spare_servers = max_children × 0.50
dynamic — Önerilen
PHP-FPM, min_spare_servers ile max_spare_servers arasında otomatik worker açıp kapatır. Orta-yoğun trafikli siteler için idealdir. Boşta RAM tüketimini minimize eder.
ondemand — Düşük Trafik
İstek geldiğinde worker açar, işi bitince kapatır. RAM çok kısıtlıysa (512 MB altı) veya trafik çok düşükse tercih edin. İlk istek biraz daha yavaş yanıt alabilir.
static — Sabit Performans
Her zaman max_children kadar worker açık tutar. En hızlı yanıt süresi sağlar, yeni process fork etmez. Yeterli RAM varsa ve trafik sürekli yoğunsa tercih edilir.
Değişiklik Sonrası
Ayarları değiştirdikten sonra systemctl reload php8.x-fpm komutunu çalıştırın. reload aktif bağlantıları kesmeden yeniden yükler.
| Parametre | Açıklama | Önerilen |
|---|---|---|
| pm.max_children | Aynı anda açılabilecek maksimum worker sayısı. | RAM / işlem boyutu |
| pm.start_servers | PHP-FPM başladığında açılacak worker sayısı. | max × 0.25 |
| pm.min_spare_servers | Her zaman boşta bekleyecek minimum worker sayısı. | max × 0.15 |
| pm.max_spare_servers | Boşta bekleyebilecek maksimum worker sayısı. | max × 0.50 |
| pm.max_requests | Worker’ın kaç istekten sonra yeniden başlatılacağı. Memory leak önler. | 500 – 1000 |
| request_terminate_timeout | Maksimum istek süresi. Bu süreyi aşan worker öldürülür. | 60s – 300s |
| pm.process_idle_timeout | Sadece ondemand modda: boşta worker’ın kaç saniye sonra kapatılacağı. | 10s – 30s |
Gerçek Değeri Ölçün
İşlem boyutu sunucudan sunucuya büyük fark eder. Sayfanın üstündeki komutu çalıştırıp gerçek değeri kullanın. WooCommerce gibi ağır uygulamalar 100 MB+ tüketebilir.
max_children Çok Yüksek Olmasın
Tüm worker’lar aynı anda aktif olursa RAM dolup swap’a düşer — bu durum sunucuyu neredeyse kilitler. Değeri biraz düşük tutmak, taşmış bir sunucudan çok daha iyidir.
Logları İzleyin
/var/log/php-fpm/error.log dosyasında “max_children reached” uyarısı görüyorsanız değerleri artırmanız gerekiyor.
Birden Fazla Site (Pool)
Her site için ayrı pool açıyorsanız hesaplanan değerleri pool sayısına bölün. Yüksek trafikli siteye daha fazla, düşük trafikli siteye daha az worker ayırın.