Pengaturan PHP-FPM: gunakan pm statis untuk kinerja maksimal

Pengaturan PHP-FPM: gunakan pm statis untuk kinerja maksimal

Versi artikel ini yang belum diedit awalnya diterbitkan pada haydenjames.io dan diterbitkan di sini dengan izinnya penulis.

Saya akan memberi tahu Anda secara singkat cara terbaik mengkonfigurasi PHP-FPM untuk meningkatkan throughput, mengurangi latensi, dan menggunakan CPU dan memori secara lebih konsisten. Secara default, baris PM (manajer proses) di PHP-FPM adalah dinamis, dan jika Anda tidak memiliki cukup memori, lebih baik menginstalnya ondemand. Mari kita bandingkan 2 opsi kontrol berdasarkan dokumentasi php.net dan lihat perbedaan favorit saya dari keduanya statis pm untuk lalu lintas volume tinggi:

sore = dinamis β€” jumlah proses anak dikonfigurasikan secara dinamis berdasarkan arahan berikut: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
pm = sesuai permintaan - proses dibuat sesuai permintaan (berlawanan dengan pembuatan dinamis, ketika pm.start_servers diluncurkan saat layanan dimulai).
sore = statis β€” jumlah proses anak ditetapkan dan ditunjukkan oleh parameter pm.max_children.

Untuk detailnya, lihat daftar lengkap arahan global php-fpm.conf.

Persamaan antara manajer proses PHP-FPM dan pengontrol frekuensi CPU

Ini mungkin tampak di luar topik, tapi saya akan menghubungkannya dengan topik konfigurasi PHP-FPM. Siapa yang belum pernah mengalami perlambatan prosesor setidaknya sekali - di laptop, mesin virtual, atau server khusus. Ingat penskalaan frekuensi CPU? Opsi ini tersedia untuk nix dan Windows dapat meningkatkan kinerja dan daya tanggap sistem dengan mengubah pengaturan throttle prosesor dari ondemand pada pertunjukan*. Kali ini mari kita bandingkan deskripsinya dan lihat persamaannya:

gubernur=sesuai permintaan β€” penskalaan dinamis frekuensi prosesor tergantung pada beban saat ini. Melompat dengan cepat ke frekuensi maksimum dan kemudian menguranginya seiring bertambahnya periode tidak aktif.
gubernur=konservatif= penskalaan frekuensi dinamis tergantung pada beban saat ini. Menambah dan mengurangi frekuensi lebih lancar dibandingkan ondemand.
Gubernur = kinerja β€” frekuensi selalu maksimum.

Untuk detailnya, lihat daftar lengkap parameter pengatur frekuensi prosesor.

Lihat persamaannya? Saya ingin menunjukkan perbandingan ini untuk meyakinkan Anda bahwa ini adalah yang terbaik untuk digunakan sore statis untuk PHP-FPM.

Untuk parameter pengatur prosesor prestasi membantu meningkatkan kinerja dengan aman karena hampir seluruhnya bergantung pada batas CPU server. Selain itu tentunya juga ada faktor seperti suhu, daya baterai (di laptop) dan efek samping lain dari terus menjalankan prosesor pada 100%. Pengaturan kinerja memastikan kinerja prosesor tercepat. Baca, misalnya, tentang parameter force_turbo di Raspberry Pi, yang mana panel RPi akan menggunakan regulator prestasi, di mana peningkatan kinerja akan lebih terlihat karena rendahnya kecepatan jam CPU.

Menggunakan pm static untuk mencapai kinerja server yang maksimal

Opsi PHP-FPM sore statis sangat bergantung pada memori bebas di server. Jika memori rendah, lebih baik memilih ondemand ΠΈΠ»ΠΈ dinamis. Di sisi lain, jika Anda memiliki memori, Anda dapat menghindari overhead manajer proses PHP dengan mengatur pm statis hingga kapasitas server maksimum. Dengan kata lain, jika semuanya sudah diperhitungkan dengan baik, Anda perlu menetapkannya pm.statis ke volume maksimum proses PHP-FPM yang dapat dijalankan, tanpa menimbulkan masalah dengan memori atau cache yang rendah. Namun tidak terlalu tinggi sehingga membebani prosesor dan mengumpulkan banyak operasi PHP-FPM yang menunggu untuk dieksekusi.

Pengaturan PHP-FPM: gunakan pm statis untuk kinerja maksimal

Pada tangkapan layar di atas, server memiliki pm = statis dan pm.max_children = 100, dan ini memakan sekitar 10 GB dari 32 GB yang tersedia. Perhatikan kolom yang disorot, semuanya jelas di sini. Di tangkapan layar ini ada sekitar 200 pengguna aktif (lebih dari 60 detik) di Google Analytics. Pada tingkat ini, sekitar 70% proses anak PHP-FPM masih menganggur. Artinya PHP-FPM selalu disetel ke jumlah maksimum sumber daya server, apa pun lalu lintas saat ini. Proses yang menganggur menunggu lalu lintas mencapai puncaknya dan merespons secara instan. Anda tidak perlu menunggu sampai pm akan membuat proses anak dan kemudian menghentikannya ketika periode tersebut berakhir pm.process_idle_timeout. Saya menetapkan nilainya menjadi sangat tinggi pm.max_requestskarena ini adalah server yang berfungsi tanpa kebocoran memori di PHP. Anda dapat menginstal pm.max_requests = 0 dengan statis jika Anda benar-benar yakin dengan skrip PHP yang ada dan yang akan datang. Namun lebih baik menjalankan kembali skrip seiring berjalannya waktu. Tetapkan permintaan dalam jumlah besar, karena kami ingin menghindari biaya pm yang tidak perlu. Misalnya, setidaknya pm.max_requests = 1000 - tergantung kuantitas pm.max_children dan jumlah permintaan per detik.

Tangkapan layar menunjukkan perintah Linux teratas, difilter berdasarkan u (pengguna) dan nama pengguna PHP-FPM. Hanya sekitar 50 proses pertama yang ditampilkan (saya tidak menghitung secara pasti), tetapi pada dasarnya top menunjukkan statistik teratas yang sesuai dengan jendela terminal. Dalam hal ini diurutkan berdasarkan % CPU (%CPU). Untuk melihat 100 proses PHP-FPM, jalankan perintah:

top -bn1 | grep php-fpm

Kapan menggunakan pm ondemand dan dinamis

Jika Anda menggunakan sore dinamis, kesalahan seperti ini terjadi:

WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children

Coba ubah parameternya, kesalahannya tidak akan hilang, seperti dijelaskan dalam posting ini di Serverfault. Dalam kasus ini, nilai pm.min terlalu kecil, dan karena lalu lintas web sangat bervariasi dan memiliki puncak yang tinggi serta lembah yang dalam, sulit untuk menyesuaikan pm secara memadai. dinamis. Biasanya pm digunakan ondemand, seperti yang disarankan di postingan yang sama. Tapi ini lebih buruk lagi, karena ondemand menghentikan proses menganggur ke nol ketika lalu lintas sedikit atau tidak ada sama sekali, dan Anda masih akan mengalami overhead perubahan lalu lintas. Kecuali, tentu saja, Anda menetapkan waktu tunggu yang lama. Dan lebih baik menggunakannya pm.statis + angka tinggi pm.max_requests.

PM dinamis dan terutama ondemand mungkin berguna jika Anda memiliki beberapa kumpulan PHP-FPM. Misalnya, Anda menghosting beberapa akun cPanel atau beberapa situs web di kumpulan berbeda. Saya memiliki server dengan, katakanlah, 100+ akun cpanel dan sekitar 200 domain, dan pm.static atau bahkan dinamis tidak akan menyelamatkan saya. Yang Anda butuhkan di sini hanyalah ondemandLagi pula, lebih dari dua pertiga situs web menerima sedikit atau tidak sama sekali lalu lintas, dan dengan ondemand semua proses anak akan terhenti, yang akan menghemat banyak memori! Untungnya, pengembang cPanel memperhatikan hal ini dan menetapkan nilainya ke default ondemand. Sebelumnya, ketika defaultnya adalah dinamis, PHP-FPM sama sekali tidak cocok untuk server bersama yang sibuk. Banyak yang sudah menggunakan suPHP, karena sore dinamis menghabiskan memori bahkan dengan kumpulan menganggur dan akun cPanel PHP-FPM. Kemungkinan besar, jika trafiknya bagus, Anda tidak akan dihosting di server dengan jumlah pool PHP-FPM (shared hosting) yang banyak.

Kesimpulan

Jika Anda menggunakan PHP-FPM dan lalu lintas Anda padat, manajer proses ondemand ΠΈ dinamis untuk PHP-FPM akan memiliki throughput yang terbatas karena overhead yang melekat. Pahami sistem Anda dan konfigurasikan proses PHP-FPM sesuai dengan kapasitas server maksimum. Set pertama pm.max_children tergantung penggunaan pm maksimal dinamis ΠΈΠ»ΠΈ ondemand, lalu tingkatkan nilai ini ke tingkat di mana memori dan prosesor akan bekerja tanpa kelebihan beban. Anda akan menyadarinya dengan sore statis, karena Anda memiliki segalanya di memori, lonjakan lalu lintas akan menyebabkan lebih sedikit lonjakan CPU seiring waktu, dan rata-rata beban server dan CPU akan sama. Rata-rata ukuran proses PHP-FPM bergantung pada server web dan memerlukan konfigurasi manual, sehingga lebih banyak pengelola proses otomatis dinamis ΠΈ ondemand - lebih populer. Saya harap artikel itu bermanfaat.

DUP Menambahkan grafik benchmark ab. Jika proses PHP-FPM berada di memori, performa akan meningkat dengan mengorbankan konsumsi memori saat proses tersebut berada dan menunggu. Temukan pilihan terbaik untuk diri Anda sendiri.

Pengaturan PHP-FPM: gunakan pm statis untuk kinerja maksimal

Sumber: www.habr.com

Tambah komentar