Setiap pekerja PHP memegang memori, sedang sibuk maupun menganggur. Terlalu sedikit, permintaan mengantre di belakang satu sama lain; terlalu banyak, memori mesinnya habis, ia mulai bertukar ke cakram, dan jadi lebih lambat daripada kalau pekerjanya lebih sedikit.

Ukur satu pekerja

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

Biasanya 30-80 MB. Kerangka yang berat atau kumpulan pengaya yang besar mendorongnya naik, dan yang berarti adalah angka Anda sendiri, bukan angka umum.

Hitungannya

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
Sisakan ruang. Pekerja yang kebetulan menangani halaman berat memakai beberapa kali lipat rata-ratanya, dan kolam yang ditakar tepat di batasnya akan melampaui batas itu begitu lalu lintasnya tidak biasa - justru saat Anda perlu ia bertahan.

static, dynamic, atau ondemand

  • static - semua pekerja dinyalakan saat mesin menyala. Paling cepat dan memakai memorinya baik sibuk maupun tidak. Cocok untuk mesin khusus dengan beban yang tetap.
  • dynamic - menyimpan beberapa cadangan dan tumbuh sampai batasnya. Inilah bawaan yang masuk akal.
  • ondemand - menyala saat diminta dan dimatikan setelah tenggat. Memori paling irit, sedikit jeda pada permintaan pertama. Cocok untuk banyak situs kecil di satu mesin.
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 adalah asuransi terhadap kebocoran

Seorang pekerja dipensiunkan sesudah sekian permintaan itu dan yang baru mengambil alih. Ongkosnya nyaris nol dan ia mengurung kebocoran lambat di pustaka mana pun yang tak Anda kendalikan.

Periksa apakah Anda mulai kehabisan

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

Baris itu berarti ada permintaan yang mengantre. Kalau ia tak pernah muncul, kolamnya sudah cukup besar dan menaikkannya tidak akan mempercepat apa pun.

Di hosting EGPHP, kolamnya ditakar dan dipantau untuk Anda. Yang ini untuk VPS yang Anda jalankan sendiri, tempat nilai bawaannya jarang pas untuk mesin itu.