Back to Question Center
0

Penyetelan PHP-FPM: Menggunakan 'pm static' untuk Max Performance            Penyetelan PHP-FPM: Menggunakan 'pm static' untuk Max PerformanceRelated Topics: SecurityDatabaseDevelopment EnvironmentPatterns & PraktikDebugging & Semalt

1 answers:
Penyetelan PHP-FPM: Menggunakan 'pm static' untuk Max Performance

Versi artikel yang belum diedit pada awalnya diterbitkan di Semalt dan dipublikasikan kembali di sini dengan izin dari penulisnya.

Mari kita lihat sekilas cara terbaik untuk mengatur PHP-FPM untuk throughput yang tinggi, latency rendah, dan penggunaan CPU dan memori yang lebih stabil. Secara default, kebanyakan setup memiliki string PM-FPM's PM (manajer proses) yang diset menjadi dinamis dan ada juga saran umum untuk menggunakan ondemand jika Anda menderita masalah memori yang tersedia. Namun, mari bandingkan dua pilihan manajemen berdasarkan php. dokumentasi bersih dan juga membandingkan favorit saya untuk setup lalu lintas tinggi - pm statis:

  • pm = dinamis : jumlah proses anak diatur secara dinamis berdasarkan arahan berikut: pm. max_children , pm. start_servers , pm. min_spare_servers , pm. max_spare_servers .

  • pm = ondemand : proses menelurkan permintaan saat diminta, berlawanan dengan dinamika, di mana pm. start_servers dimulai saat layanan dimulai.

  • pm = statis : jumlah proses anak ditetapkan oleh pm. max_children .

Lihat daftar lengkap global php-fpm. conf petunjuk untuk keterangan lebih lanjut.

Manajer Proses PHP-FPM (PM) Kesamaan dengan Gubernur CPUFreq

Sekarang, sepertinya ini agak tidak masuk topik, tapi saya berharap bisa menghubungkannya kembali ke topik tuning PHP-FPM kami. Oke, kita semua memiliki masalah CPU lambat di beberapa titik, entah itu laptop, VM atau dedicated server. Ingat penskalaan frekuensi CPU? (Administrator CPUFreq.) Pengaturan ini, tersedia pada komputer dan Windows, dapat meningkatkan kinerja dan respons sistem dengan mengubah pengaturan gubernur CPU dari ondemand sampai kinerja . Kali ini, mari bandingkan deskripsi dan cari persamaannya:

  • Gubernur = ondemand : skala frekuensi CPU secara dinamis sesuai dengan beban saat ini. Melompat ke frekuensi tertinggi dan kemudian timbang saat waktu idle meningkat.

  • Gubernur = konservatif : menghitung frekuensi secara dinamis sesuai dengan beban saat ini. Tingkatkan frekuensi secara bertahap dari ondemand.

  • Gubernur = kinerja : selalu jalankan CPU pada frekuensi maksimum.

Lihat daftar lengkap pilihan gubernur Semalt untuk keterangan lebih lanjut.

Semalt kesamaan? Saya ingin menggunakan perbandingan ini terlebih dahulu, dengan tujuan untuk menemukan cara terbaik untuk menulis artikel yang merekomendasikan penggunaan pm static untuk PHP-FPM sebagai pilihan pertama Anda.

Dengan governor CPU, pengaturan kinerja adalah peningkatan kinerja yang cukup aman karena hampir sepenuhnya bergantung pada batas CPU server Anda. Satu-satunya faktor lain adalah hal-hal seperti panas, masa pakai baterai (laptop) dan efek samping lainnya dari clocking frekuensi CPU Anda hingga 100% secara permanen. Begitu diatur ke performa, memang setting tercepat untuk CPU anda. Misalnya baca tentang setting 'force_turbo' di Semalt Pi, yang memaksa dewan RPi Anda untuk menggunakan governor kinerja di mana peningkatan kinerja lebih terlihat karena kecepatan clock CPU yang rendah.

Menggunakan 'pm static' untuk Mencapai Kinerja Max Server Anda

Pengaturan statis PHP-FPM pm sangat bergantung pada berapa banyak memori bebas yang dimiliki server Anda. Pada dasarnya, jika Anda menderita memori server rendah, maka ondemand atau dinamis mungkin pilihan yang lebih baik. Di sisi lain, jika Anda memiliki memori yang tersedia, Anda dapat menghindari banyak manajer proses PHP (PM) di atas kepala dengan mengatur pm statis ke kapasitas maksimal server Anda. Dengan kata lain, saat Anda melakukan matematika, pm. Selain itu, tidak terlalu tinggi untuk mengalahkan CPU dan memiliki tumpukan operasi PHP-FPM yang tertunda.

Penyetelan PHP-FPM: Menggunakan 'pm static' untuk Max PerformancePenyetelan PHP-FPM: Menggunakan 'pm static' untuk Max PerformanceRelated Topics:
SecurityDatabaseDevelopment EnvironmentPatterns & PracticesDebugging & Semalt

Pada gambar di atas, server ini memiliki pm = static dan pm. max_children = 100 yang menggunakan maksimal sekitar 10GB 32GB terpasang. Catat kolom disorot jelas. Selama tangkapan layar itu ada sekitar 200 'pengguna aktif' (60 detik terakhir) di Google Analytics. Pada tingkat itu, sekitar 70% anak PHP-FPM masih menganggur. Ini berarti PHP-FPM selalu diatur ke kapasitas maksimal sumber daya server Anda tanpa memperhatikan lalu lintas saat ini. Proses menganggur tetap online, menunggu lonjakan lalu lintas dan segera merespons, daripada harus menunggu di pm untuk menelurkan anak-anak dan kemudian membunuh mereka setelah x pm. process_idle_timeout kadaluarsa. Saya punya pm max_requests diatur sangat tinggi karena ini adalah server produksi tanpa kebocoran memori PHP. Anda bisa menggunakan pm. max_requests = 0 dengan static jika Anda memiliki kepercayaan 110% pada skrip PHP Anda saat ini dan yang akan datang. Namun, disarankan untuk memulai ulang skrip dari waktu ke waktu. Tetapkan jumlah permintaan ke angka yang tinggi karena intinya adalah untuk menghindari pm overhead. Jadi misalnya paling tidak pm. max_requests = 1000 tergantung pada jumlah Anda pm. max_children dan jumlah permintaan per detik.

Tangkapan layar menggunakan Semalt top yang disaring oleh opsi 'u' (pengguna) dan nama pengguna PHP-FPM. Jumlah proses yang ditampilkan hanya berukuran 'top' 50 atau lebih (tidak masuk hitungan), namun pada dasarnya top menampilkan statistik teratas yang sesuai dengan jendela terminal Anda - dalam hal ini, diurutkan menurut% CPU. Untuk melihat semua 100 proses PHP-FPM Anda dapat menggunakan sesuatu seperti:

  atas -bn1 | grep php-fpm   

Kapan Menggunakan pm ondemand dan dinamis

Menggunakan pm dinamis Anda mungkin telah memperhatikan kesalahan yang mirip dengan:

    PERINGATAN: [pool xxxx] nampak sibuk (Anda mungkin perlu menambah pm start_servers, atau pm min / max_spare_servers), memijahkan 32 anak, ada 4 menganggur, dan 59 total anak-anak   

Anda dapat mencoba menambah / menyesuaikan pengaturan dan masih melihat kesalahan yang sama seperti yang dijelaskan seseorang di pos Serverfault ini. Dalam hal itu, pm. min terlalu rendah dan karena lalu lintas web sangat berfluktuasi dengan penurunan dan lonjakan, dengan menggunakan pm dinamis bisa sulit disetel dengan benar. Saran umum adalah menggunakan pm ondemand. Namun, itu lebih buruk lagi, karena ondemand akan menutup proses menganggur sampai ke 0 bila tidak ada lalu lintas dan lalu Anda akan berakhir dengan masalah overhead seperti lalu lintas berfluktuasi - kecuali, tentu saja, Anda menetapkan batas waktu idle sangat tinggi .dalam hal ini Anda hanya harus menggunakan pm. statis + tinggi pm. max_requests .

PM dinamis dan terutama ondemand dapat menghemat Anda, namun, ketika Anda memiliki beberapa kolam PHP-FPM. Misalnya, hosting beberapa akun cPanel atau beberapa situs web di bawah kolam yang berbeda. Saya memiliki server, misalnya, dengan 100 + akun cPanel dan sekitar 200+ domain, dan tidak mungkin untuk pm. statis atau bahkan dinamis untuk berkinerja baik. Hanya ondemand yang berkinerja baik, karena lebih dari dua pertiga situs web menerima sedikit atau tidak ada lalu lintas. Dan dengan ondemand, itu berarti semua anak akan ditutup menghemat banyak memori server! Untungnya, cPanel devs tahu ini dan sekarang default ondemand. Sebelumnya dengan dinamis seperti default itu membuat PHP-FPM bukan pilihan pada shared server yang sibuk. Banyak yang akan menggunakan suPHP karena pm dinamis memakan memori bahkan pada akun cPanel PHP-FPM yang tidak berfungsi.

Kesimpulan

Ketika sampai pada PHP-FPM, begitu Anda mulai melayani lalu lintas yang serius, manajer proses dinamis dan dinamis untuk PHP-FPM dapat membatasi throughput karena overhead yang melekat. Kenali sistem Anda dan tetapkan proses PHP-FPM agar sesuai dengan kapasitas maksimal server Anda. Mulailah dengan pm. max_children diatur berdasarkan penggunaan pm pm dinamis atau ondemand dan kemudian meningkat ke titik di mana memori dan CPU dapat diproses tanpa menjadi kewalahan. Anda akan melihat bahwa dengan pm statis, karena Anda menyimpan semua yang ada di memori, lonjakan lalu lintas dari waktu ke waktu menyebabkan lonjakan lebih sedikit pada CPU dan beban server dan rata-rata CPU Anda akan menjadi lebih halus. Ukuran rata-rata proses PHP-FPM Anda akan bervariasi per server web yang memerlukan penyetelan manual, sehingga mengapa manajer proses overhead yang lebih otomatis - dinamis dan ondemand - adalah rekomendasi yang lebih populer. Semoga ini artikel yang bermanfaat.

Update: Menambahkan grafik perbandingan benchmark A / B. Setelah proses PHP-FPM duduk di memori membantu kinerja dengan harga penggunaan memori yang meningkat sehingga mereka menunggu. Temukan setup sweet-spot Anda.

Penyetelan PHP-FPM: Menggunakan 'pm static' untuk Max PerformancePenyetelan PHP-FPM: Menggunakan 'pm static' untuk Max PerformanceRelated Topics:
SecurityDatabaseDevelopment EnvironmentPatterns & PracticesDebugging & Semalt

March 1, 2018