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:

  1. 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.
  2. dynamic – Mesin (child process) akan diciptakan secara dinamis berdasarkan pm.start_servers, pm.min_spare_servers dan pm.max_spare_servers. Jadi selalu ada minimalnya yang akan selalu aktif. Kalau CPU servernya bagus boleh pakai ini.
  3. 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, dan pm.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:

  1. PHP-FPM Configuration: http://php.net/manual/en/install.fpm.configuration.php
  2. PHP-FPM www.conf: https://gist.github.com/evansolomon/2273968

3 pemikiran pada “Setelan process manager PHP-FPM

  1. terima kasih mas chandra, sejak diubah ke ondemand ruang bebas memory jadi lebih lega 🙂

                 total       used       free     shared    buffers     cached
    Mem:           498        482         16         24         51        182
    -/+ buffers/cache:        249        249
    Swap:         1023         45        978
    • Loh… ampuh banget ya mbak, langsung turun hampir separuh gitu. 😀 Sebelumnya dynamic berarti? Saya dari dulu pakai ondemand tapi lupa apa keunggulannya, pas nulis ini jadi ingat apa – apa saja. Hehe. 🙂

  2. itu php-fpmnya ya mas, kalau mode mpm-worker atau mode mpm-event gmn mas? saya masih bingung mas, ada yang jaga2 ada juga malah yang jorjoran g mikir spesifikasi servernya. apa karena saya yang terlalu awam sama tuning :D. btw sy punya 4 server dengan spesifikasi @ xeon e3 4 core memory 8 gb. untuk tuningnya lebih baik pake dinamyc atau static mas karena 3 server itu hnya utk web server saja. 4 server tersebut ada di belakang haproxy. yang jadi masalah lama kelamaan haproxy ini sprt menampilkan statistic yang tidak real dimana kadang nampilin backend server down, up, down lg terus menerus kecuali servicenya direstart baru sembuh lg kira2 apanya ya mas mohon masukannya.

Tinggalkan komentar