PHP-FPM pm.max_children ayarı nasıl hesaplanır?

PHP-FPM pm.max_children ayarı nasıl hesaplanır?
Tepki Ver

 

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.

Temel Hesaplama Formülü
pm.max_children değeri hesaplanırken kullanılan temel formül şudur:
$$\text{pm.max\_children} = \frac{\text{Toplam RAM} – \text{Sistem ve Diğer Servisler İçin Ayrılan RAM}}{\text{Bir PHP İşleminin Ortalama Bellek Tüketimi}}$$

Adım Adım Hesaplama Yöntemi
  1. 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.
  2. 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
Sunucunuzdaki PHP-FPM süreçlerinin ortalama RAM tüketimini öğrenmek için şu komutları çalıştırabilirsiniz:
ps -ylC php-fpm8.4 –sort:rss | awk ‘{sum+=$8; count++} END {print “Average:”, sum/count/1024, “MB”}’
veya
ps aux | grep php-fpm | awk ‘{sum+=$6} END {print sum/1024 ” MB”}’
  1. 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_children olarak 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.

Örnek Hesaplama Senaryoları
  • 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)
İlişkili Diğer Havuz (Pool) Parametreleri (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_children değ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)
Yazar Profili
Gurbetseli Yönetici Tüm Yazılar

bilgeo.com Teknoloji Haberleri, Program Çözümleri, Mobil Uygulamalar ve İnternet Dünyası Hakkında Bir Çok Bilgiyi Güncel Olarak Takip Edebileceğiniz Geniş Kapsamlı Blog Sitesi.

Kullanıcıya ait herhangi bir sosyal medya veya iletişim bilgisi bulunmamaktadır.

515 Yazı

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir