Setelan process manager PHP-FPM
Pembahasan kali ini dari permintaan mbak Shafira untuk optimasi Process Manager dari PHP-FPM. Ya sekalian saya belajar juga soal mana setelan terbaik tergantung situasi dan spesifikasi servernya. Tidak semuanya sama kan. 😀
Fokusnya adalah Process Manager yang bisa anda temukan dalam konfigurasi PHP-FPM:
pm = ondemand
pm.max_children = 16
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 12
pm.max_requests = 1000
Saya jelaskan dulu semampu saya. 😀
pm ini bisa diisi 3 jenis:
- static – Mesinnya selalu tersedia sesuai jumlah yang telah ditentukan. Tidak perlu dibuka-tutup, jadi semestinya yang paling cepat. Tapi penggunaan memorinya akan berjalan terus dan kadang perlu direstart manual (atau terjadwal dengan cron) untuk mengurangi memori terpakai. Tidak pernah dilepas soalnya. Tapi yang paling bagus performanya.
- dynamic – Mesin (child process) akan diciptakan secara dinamis berdasarkan
pm.start_servers
,pm.min_spare_servers
danpm.max_spare_servers
. Jadi selalu ada minimalnya yang akan selalu aktif. Kalau CPU servernya bagus boleh pakai ini. - ondemand – Ini adalah yang paling seimbang performa dengan penggunaan memorinya. Jadi proses anakannya hanya diciptakan saat diperlukan, agak mirip dengan dynamic tapi ini benar – benar dari 1 master process saja. Dan parameter yang berpengaruh adalah
pm.max_children
,pm.process_idle_timeout
, danpm.max_requests
. Selama tidak terpakai akan dimatikan, jadi ini yang paling hemat memori diantara semuanya.
Satu lagi kalau pm.max_requests ini tercapai angkanya maka akan direspawn prosesnya. Misal diisi 1000 berarti akan melayani 1000 permintaan per detik dan apabila lebih dari itu akan direspawn dan dari 0 lagi. Ingat 1000 request per detik ya, bukan 1000 pengunjung per detik, satu pengunjung bisa beberapa request sekaligus. Kalau anda setel terlalu rendah akan sering direspawn dan membuat proses requestnya tersendat, jangan terlalu tinggi juga karena bisa meledak konsumsi memorinya karena terlalu lama dipegang.
Referensi yang bisa membantu:
- PHP-FPM Configuration: http://php.net/manual/en/install.fpm.configuration.php
- PHP-FPM www.conf: https://gist.github.com/evansolomon/2273968