Her PHP işçisi, meşgul de olsa boşta da olsa bellek tutar. Az olurlarsa istekler birbirinin ardında kuyruğa girer; çok olurlarsa makinenin belleği tükenir, takasa başlar ve daha azıyla olacağından bile yavaşlar.

Bir işçiyi ölçün

ps -ylC php-fpm8.3 --sort:rss | awk '{sum+=$8; n++} END {print sum/n/1024 " MB average"}'

Genellikle 30-80 MB. Ağır bir çerçeve ya da büyük bir eklenti takımı bunu yukarı çeker; önemli olan da tipik bir sayı değil, sizin kendi sayınızdır.

Hesabı

max_children = (RAM available to PHP) / (average worker size)

# 8GB box, 2GB for the database and the system, 50MB a worker:
# 6000 / 50 = 120 - then be conservative and use 80
Pay bırakın. Ağır bir sayfaya denk gelen bir işçi ortalamanın birkaç katını kullanır ve tam sınıra göre boyutlanmış bir havuz, trafik olağandışı olduğu anda o sınırı aşar - yani tam da dayanmasına ihtiyacınız olan anda.

static mi, dynamic mi, ondemand mı

  • static - bütün işçiler açılışta başlar. En hızlısıdır ve meşgul olsun olmasın belleği kullanır. Düzenli yük altındaki adanmış bir makine için doğrudur.
  • dynamic - bir miktarını yedekte tutar ve sınıra kadar büyür. Makul olan varsayılan budur.
  • ondemand - istek gelince başlar ve bir süre sonra kapatır. En az bellek, ilk istekte küçük bir gecikme. Tek makinede çok sayıda küçük site için doğrudur.
pm = dynamic
pm.max_children = 80
pm.start_servers = 12
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500

max_requests bir sızıntı sigortasıdır

İşçi, o kadar istekten sonra emekliye ayrılır ve yerini yenisi alır. Neredeyse hiçbir şeye mal olmaz ve denetiminizde olmayan herhangi bir kitaplıktaki ağır bir sızıntıyı sınırlar.

Sınıra dayanıp dayanmadığınızı denetleyin

grep "server reached pm.max_children" /var/log/php8.3-fpm.log

O satır, isteklerin kuyruğa girdiği anlamına gelir. Hiç görünmüyorsa havuz yeterince büyüktür ve onu yükseltmek hiçbir şeyi hızlandırmaz.

EGPHP barındırmasında havuz sizin için boyutlandırılır ve izlenir. Buradaki, kendi işlettiğiniz ve varsayılanın makineye pek de uymadığı bir sanal sunucu içindir.