PHP-FPM (atau Fast Process Manager) menawarkan beberapa keunggulan dibandingkan mod_php, dengan dua yang paling menonjol adalah lebih fleksibel untuk dikonfigurasi dan saat ini merupakan mode yang disukai untuk menjalankan PHP oleh banyak komunitas. Namun, jika Anda menggunakan pengaturan konfigurasi default pengelola paket, kemungkinan besar Anda tidak akan mendapatkan hasil maksimal darinya Dalam posting ini, saya akan memberikan gambaran singkat tentang cara meningkatkan kinerja PHP-FPM, dengan membahas tiga tipe manajer proses PHP-FPM, dan mana yang terbaik untuk digunakan dalam keadaan apa. PHP-FPM dapat menggunakan salah satunya
Mari kita lihat masing-masing dengan sedikit detail StatisStatis memastikan sejumlah proses anak selalu tersedia untuk menangani permintaan pengguna. Ini diatur dengan. Dalam mode ini permintaan tidak perlu menunggu proses baru dimulai, yang menjadikannya pendekatan tercepat Dengan asumsi bahwa Anda ingin menggunakan konfigurasi statis dengan 10 proses anak selalu tersedia, Anda akan mengonfigurasinya di pm = static pm.max_children = 10 Untuk melihat apakah perubahan konfigurasi sudah efektif, setelah memulai ulang PHP-FPM, jalankan php-fpm7.2-+-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 `-php-fpm7.2 _DinamisDalam mode ini, PHP-FPM secara dinamis mengatur jumlah proses anak yang tersedia dan memastikan setidaknya satu proses anak selalu tersedia Konfigurasi ini menggunakan lima pilihan konfigurasi;
Sekarang bagian yang menyenangkan datang; SettingValuemax_children (Total RAM — Memori yang digunakan untuk Linux, DB, dll. ) / ukuran prosesstart_serversJumlah inti CPU x 4min_spare_serversJumlah inti CPU x 2max_spare_serversSama seperti php-fpm7.2-+-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 `-php-fpm7.2 5Kita juga perlu mengatur php-fpm7.2-+-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 `-php-fpm7.2 _4, yang merupakan jumlah detik setelah proses menganggur akan dimatikanKatakanlah server kita memiliki dua CPU, masing-masing dengan empat inti, dan RAM 8 GB. Jika kita berasumsi bahwa Linux dan daemon terkait menggunakan sekitar 2GB (gunakan php-fpm7.2-+-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 `-php-fpm7.2 7 untuk mendapatkan nilai yang lebih spesifik), itu menyisakan sekitar 6192MBSekarang, berapa banyak memori yang digunakan setiap proses? . py. Setelah menjalankannya, menggunakan php-fpm7.2-+-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 `-php-fpm7.2 _8, Anda akan mendapatkan keluaran seperti berikut28.4 MiB + 33.8 MiB = 62.2 MiB php-fpm7.2 (11) Kolom pertama adalah memori pribadi. Kolom kedua adalah memori bersama. Kolom ketiga adalah total RAM yang digunakan. Kolom keempat adalah nama proses Dari gambar di atas, Anda dapat melihat bahwa ukuran prosesnya adalah 62. 2Mb. Jadi, memasukkan semua informasi itu ke dalam formula kami, kami sampai pada yang berikut # Round the result up. (8192 - 2000) / 62.2 Berdasarkan itu, kami sampai pada nilai pengaturan berikut SettingValuemax_children100start_servers32min_spare_servers16max_spare_servers32 Kami akan membiarkan php-fpm7.2-+-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 |-php-fpm7.2 `-php-fpm7.2 _4 ke default 28.4 MiB + 33.8 MiB = 62.2 MiB php-fpm7.2 (11) 0. Dengan asumsi bahwa kami senang dengan pengaturan ini, maka kami akan mengonfigurasinya sebagai berikutpm = dynamic pm.max_children = 100 pm.start_servers = 32 pm.min_spare_servers = 16 pm.max_spare_servers = 32 pm.max_requests = 200 Anda juga dapat menggunakan alat pemantau memori secara teratur untuk memantau berapa banyak memori yang digunakan aplikasi Anda. Ada sejumlah opsi yang tersedia untuk PHP, termasuk php-memprof dan Tideways sesuai permintaanondemand memiliki proses garpu PHP-FPM saat permintaan diterima. Untuk mengkonfigurasi PHP-FPM untuk menggunakannya, kita perlu mengatur 28.4 MiB + 33.8 MiB = 62.2 MiB php-fpm7.2 (11) 1 ke 28.4 MiB + 33.8 MiB = 62.2 MiB php-fpm7.2 (11) 2, dan memberikan nilai untuk
28.4 MiB + 33.8 MiB = 62.2 MiB php-fpm7.2 (11) _3 menetapkan jumlah permintaan yang harus dijalankan oleh setiap proses anak sebelum respawning. Dokumentasi menunjukkan bahwa pengaturan ini berguna untuk mengatasi kebocoran memoriDengan asumsi bahwa kami mengambil pengaturan yang sama seperti untuk 28.4 MiB + 33.8 MiB = 62.2 MiB php-fpm7.2 (11) 2, kami akan mengonfigurasinya sebagai berikutpm = ondemand pm.max_children = 100 pm.process_idle_timeout = 10s pm.max_requests = 200 Konfigurasi Mana yang Tepat Untuk Anda?Sejujurnya? . "tergantung", karena selalu bergantung pada jenis aplikasi yang Anda jalankan. Namun, berikut adalah beberapa saran tentang konfigurasi mana yang harus dipilih Situs Lalu Lintas RendahJika Anda memiliki situs dengan lalu lintas rendah, seperti hosting panel kontrol backend, seperti cPanel, gunakan ondemand. Memori akan disimpan karena proses anak hanya akan muncul saat dibutuhkan dan dimatikan saat tidak lagi diperlukan. Karena ini adalah backend, pengguna dapat menunggu satu atau dua saat lebih lama sementara utas muncul untuk menangani permintaan mereka Situs Lalu Lintas TinggiJika Anda memiliki situs web dengan lalu lintas tinggi, gunakan statis dan sesuaikan pengaturan berdasarkan kebutuhan Anda dari waktu ke waktu dan sumber daya perangkat keras yang tersedia. Mungkin tampak berlebihan untuk memiliki sejumlah besar proses anak yang selalu siap menerima permintaan Namun, situs dengan lalu lintas tinggi perlu merespons secepat mungkin. Oleh karena itu, sangat penting untuk menggunakan statis sehingga cukup banyak proses anak yang siap melakukannya Dengan menggunakan ondemand, proses anak kemungkinan akan menghabiskan terlalu banyak memori yang dihasilkan dan dimatikan, dan penundaan startup akan berdampak pada kinerja Menggunakan dinamis mungkin tidak seburuk itu, tergantung pada konfigurasinya. Namun, Anda mungkin berakhir dengan konfigurasi yang mencerminkan statis secara efektif Menggunakan Beberapa Pool untuk Frontend/BackendSekarang untuk satu rekomendasi terakhir. melayani frontend dan backend situs web Anda menggunakan kumpulan yang berbeda. Katakanlah Anda memiliki situs e-niaga, mungkin diberdayakan oleh Magento. Anda dapat melihat aplikasi ini terdiri dari dua bagian
Jika dilihat dengan cara ini, masuk akal untuk memiliki satu kumpulan yang melayani frontend dan kumpulan lainnya yang melayani backend dan mengonfigurasi masing-masing dengan tepat Untuk apa nilainya, Anda dapat membagi aplikasi apa pun menjadi beberapa bagian menggunakan strategi ini, jika masuk akal untuk melakukannya. Inilah cara melakukannya Di ; frontend [frontend] listen = /var/run/php-fpm-frontend.sock user = www-data group = www-data listen.owner = www-data listen.group = www-data pm = static pm.max_children = 5; backend [backend] listen = /var/run/php-fpm-backend.sock user = www-data group = www-data listen.owner = www-data listen.group = www-data pm = ondemand pm.max_children = 5 pm.process_idle_timeout = 10s Ini menciptakan dua kumpulan, satu untuk frontend, dan satu untuk backend. Keduanya memiliki pengguna dan grup yang sama, tetapi memiliki konfigurasi manajer proses yang berbeda dan terhubung melalui soket yang berbeda Kumpulan frontend menggunakan konfigurasi statis dengan sejumlah kecil proses anak maksimum. Kumpulan backend menggunakan konfigurasi on-demand, juga dengan sejumlah kecil konfigurasi. Angka-angka ini sewenang-wenang, karena untuk keperluan contoh Dengan itu disimpan, untuk file vhost NGINX Anda, gunakan konfigurasi berikut server { listen 80; server_name test-site.localdomain; root /var/www/test-site/public; access_log /var/log/nginx/test-site.access.log; error_log /var/log/nginx/test-site.error.log error; index index.php; set $fpm_socket "unix:/var/run/php-fpm-frontend.sock"; if ($uri ~* "^/api/") { set $fpm_socket "unix:/var/run/php-fpm-backend.sock"; } location / { try_files $uri $uri/ /index.php; location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass $fpm_socket; fastcgi_index index.php; include fastcgi.conf; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } } Ini membuat konfigurasi host virtual yang mengirimkan permintaan ke kumpulan frontend atau backend, berdasarkan lokasi yang diminta. Permintaan apa pun ke 28.4 MiB + 33.8 MiB = 62.2 MiB php-fpm7.2 (11) 6 dikirim ke kumpulan backend, dan semua permintaan lainnya dialihkan ke frontendKesimpulannyaItulah pengantar cepat untuk menyetel PHP-FPM untuk kinerja yang lebih baik. Kami telah melihat tiga konfigurasi manajer proses yang berbeda, pengaturan terkaitnya, dan membahas kapan setiap konfigurasi masuk akal. Kami kemudian menyelesaikannya dengan melihat kumpulan pekerja |