PHP-FPM pm.max_children ayarı nasıl hesaplanır?
PHP-FPM’de pm.max_children ayarı, sunucunun aynı anda işleyebileceği maksimum PHP işlem (worker) sayısını belirler. Yanlış yapılandırıldığında yetersiz süreç nedeniyle web sitesi yanıt veremez hale gelebilir ya da aşırı RAM kullanımından dolayı sunucu çökebilir.
pm.max_children değeri hesaplanırken kullanılan temel formül şudur:- PHP-FPM İçin Kullanılabilir RAM Miktarını Belirleyin: Toplam sunucu belleğinin tamamı PHP-FPM’e ayrılmamalıdır. İşletim sistemi (Linux), web sunucusu (Nginx/Apache), veritabanı (MySQL/MariaDB) ve önbellek sistemleri (Redis) için yeterli RAM bırakılmalıdır.
- Örnek: 16 GB RAM’li bir sunucuda işletim sistemi ve veritabanı için 4 GB ayrılıp, PHP-FPM için 12 GB kullanılabilir bellek bırakılabilir.
- Bir PHP İşleminin (Worker) Ortalama Bellek Kullanımını Ölçün: Çalıştırılan uygulamanın türüne göre her bir PHP süreci farklı miktarda bellek tüketir:
- WordPress: İşlem başına ~50–80 MB
- Laravel uygulamaları: İşlem başına ~80–120 MB
- Magento 2: İşlem başına ~200–300 MB
ps -ylC php-fpm8.4 –sort:rss | awk ‘{sum+=$8; count++} END {print “Average:”, sum/count/1024, “MB”}’
ps aux | grep php-fpm | awk ‘{sum+=$6} END {print sum/1024 ” MB”}’
- Güvenlik Tamponu (Safety Buffer) Ekleyin: Ani trafik dalgalanmalarında veya yüksek bellek tüketen özel isteklerde RAM’in tamamen dolmasını önlemek için hesaplanan teorik değerin %70–80’i
pm.max_childrenolarak ayarlanmalıdır. Bırakılan %15–30’luk güvenlik tamponu, Linux OOM-killer (Out-Of-Memory) mekanizmasının devreye girip MySQL veya Nginx gibi kritik süreçleri aniden kapatmasını engeller.
- 8 GB RAM’li Sunucu (Laravel API):
- PHP-FPM için Ayrılan RAM: 5.5 GB (MySQL ve OS için ~2.5 GB ayrıldı)
- Süreç Başına Ortalama RAM: 100 MB
- Teorik Kapasite: $5500 \text{ MB} / 100 \text{ MB} = 55$
- Güvenlik Tamponlu Değer (pm.max_children): 48
- 32 GB RAM’li Sunucu:
- Süreç Başına Ortalama RAM: 128 MB
- Güvenlik Tamponlu Değer (pm.max_children): 180 (Kapasitenin yaklaşık %70’i)
pm = dynamic)pm = dynamic modunda çalışırken pm.max_children ile uyumlu tanımlanması gereken diğer anahtar parametreler:- pm.start_servers: Sunucu başlatıldığında oluşturulacak ilk worker sayısıdır (genellikle
max_childrendeğerinin %25’i kadar ayarlanır, örn. 180 için 45) - pm.min_spare_servers: Boşta bekleyecek minimum worker sayısı (örn. 30)
- pm.max_spare_servers: Boşta bekleyecek maksimum worker sayısı (örn. 60)
- pm.max_requests: Bir worker sürecinin bellek sızıntılarını (memory leak) engellemek için kaç istek işledikten sonra kendini yeniden başlatacağını belirler (genellikle 500 – 1000)