Site aniden yanıt vermeyi kesiyor, CPU %100. Nginx 502 veriyor. Loga bakıyorsun: server reached pm.max_children. Sağda solda bloglarda "o sayıyı 500 yap geçer" derler. Yaparsan sunucu swap'a düşer ve tamamen kilitlenir. Hard reset atmak zorunda kalırsın.
Nasıl çözeriz? O sayıyı kafaya göre artıramazsın. Sunucunun boş RAM'ini bulup, tek bir PHP process'inin yediği RAM'e böleceksin. Dinamik (dynamic) yerine ondemand kullanacaksın.
-
Bir PHP process ortalama ne kadar RAM yiyor bul:
ps -ylC php-fpm --sort:rss | awk '{sum+=$8; ++n} END {print "Avg: " (sum/n)/1024 " MB"}'
-
Diyelim ki 50 MB çıktı. Sunucuda PHP'ye ayırabileceğin boş RAM 2000 MB ise: 2000 / 50 = 40.
-
Havuz ayarını aç:
nano /etc/php/8.1/fpm/pool.d/www.conf -
Değerleri matematiğe göre değiştir:
pm = ondemand
pm.max_children = 40
pm.process_idle_timeout = 10s
pm.max_requests = 500
-
Yeniden başlat:
systemctl restart php8.1-fpm
Bunu yapınca RAM şişmesi biter, yetim process'ler (zombies) sunucuyu sömürmez.
Bu cevap yeterince yardımcı oldu mu?
Görüşünüz bizim için değerli!