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.

  1. Bir PHP process ortalama ne kadar RAM yiyor bul:

Bash
 
ps -ylC php-fpm --sort:rss | awk '{sum+=$8; ++n} END {print "Avg: " (sum/n)/1024 " MB"}'
  1. Diyelim ki 50 MB çıktı. Sunucuda PHP'ye ayırabileceğin boş RAM 2000 MB ise: 2000 / 50 = 40.

  2. Havuz ayarını aç: nano /etc/php/8.1/fpm/pool.d/www.conf

  3. Değerleri matematiğe göre değiştir:

Ini, TOML
 
pm = ondemand
pm.max_children = 40
pm.process_idle_timeout = 10s
pm.max_requests = 500
  1. 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!