Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 11218|Jawab: 4

Konfigurasi dan penyetelan parameter php-fpm

[Salin tautan]
Diposting pada 26/07/2017 09.20.54 | | |
php-fpm.conf parameter penting dijelaskan secara rinci

pid = jalankan/php-fpm.pid
#pid设置, disarankan untuk mengaktifkan var/run/php-fpm.pid di direktori instalasi secara default

error_log = log/php-fpm.log
#错误日志, defaultnya adalah var/log/php-fpm.log di direktori instalasi

log_level = pemberitahuan
#错误级别. Level yang tersedia adalah: peringatan, kesalahan, peringatan, pemberitahuan, debug. Default: pemberitahuan.

emergency_restart_threshold = 60
emergency_restart_interval = 60 detik
# menunjukkan bahwa jika jumlah proses php-cgi dengan kesalahan SIGSEGV atau SIGBUS melebihi emergency_restart_threshold dalam nilai emergency_restart_interval, php-fpm akan dimulai ulang dengan baik. Kedua opsi ini umumnya tetap menjadi default.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Unit yang tersedia: s (detik), m (menit), h (jam), atau d (hari) Satuan default: s (detik). Default: 0.

daemonize = ya
#后台执行fpm, nilai defaultnya adalah ya, dan jika Anda ingin men-debug, Anda dapat mengubahnya menjadi tidak. Di FPM, pengaturan yang berbeda dapat digunakan untuk menjalankan beberapa kumpulan proses. Pengaturan ini dapat diatur satu per satu untuk setiap kumpulan proses.

dengarkan = 127.0.0.1:9000
#fpm监听端口, yaitu alamat yang diproses oleh PHP di nginx, umumnya merupakan nilai default. Format yang tersedia adalah: 'ip:port', 'port', '/path/to/unix/socket'. Setiap kumpulan proses perlu disiapkan.

listen.backlog = -1
#backlog数, -1 berarti tidak terbatas, ditentukan oleh sistem operasi, cukup komentari baris ini. Referensi: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP, atur apa pun untuk tidak membatasi IP, jika Anda ingin mengatur nginx host lain untuk mengakses proses FPM ini, Anda perlu mengatur alamat IP yang dapat diakses dengan biaya mendengarkan. Nilai defaultnya adalah apa saja. Setiap alamat dipisahkan oleh koma. Jika tidak diatur atau kosong, server mana pun diizinkan untuk meminta koneksi

listen.owner = www
listen.group = www
mendengarkan.mode = 0666
#unix opsi pengaturan soket, jika Anda menggunakan TCP untuk mengakses, Anda dapat berkomentar di sini.

pengguna = www
grup = www
#启动进程的帐户和组

PM = #对于专用服务器 dinamis, PM dapat diatur ke statis.
#如何控制子进程, opsinya statis dan dinamis. Jika statis dipilih, jumlah tetap proses turunan ditentukan oleh pm.max_children. Jika dinamis dipilih, itu ditentukan oleh parameter berikut:
pm.max_children #, jumlah maksimum proses turunan
pm.start_servers #, jumlah proses saat startup
pm.min_spare_servers #, menjamin jumlah minimum proses idle, dan buat proses anak baru jika proses idle kurang dari nilai ini
pm.max_spare_servers#, pastikan jumlah maksimum proses idle, jika proses idle lebih besar dari nilai ini, ini akan dibersihkan

pm.max_permintaan = 1000
#设置每个子进程重生之前服务的请求数. Ini sangat berguna untuk modul pihak ketiga yang mungkin mengalami kebocoran memori. Jika disetel ke '0', permintaan selalu diterima. Setara dengan variabel lingkungan PHP_FCGI_MAX_REQUESTS. Default: 0.

pm.status_path = /status
#FPM状态页面的网址. Jika Anda tidak memiliki pengaturan, Anda tidak dapat mengakses halaman status. Default: tidak ada. Pemantauan Munin akan digunakan

ping.path = /ping
#FPM监控页面的ping网址. Jika Anda tidak memiliki pengaturan, Anda tidak dapat mengakses halaman ping. Halaman ini digunakan untuk mendeteksi secara eksternal apakah FPM aktif dan dapat merespons permintaan. Perhatikan bahwa itu harus dimulai dengan garis miring (/).

ping.response = pong
#用于定义ping请求的返回相应. Mengembalikan teks dalam format teks/biasa untuk HTTP 200. Default: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Opsi ini mungkin berguna untuk skrip yang tidak dibatalkan karena alasan khusus php.ini 'max_execution_time' di pengaturan. Atur ke '0' berarti 'Mati'. Anda dapat mencoba mengubah opsi ini saat kesalahan 502 sering ditemui.

request_slowlog_timeout = 10 detik
#当一个请求该设置的超时时间后, informasi tumpukan panggilan PHP yang sesuai akan ditulis ke log lambat. Atur ke '0' berarti 'Nonaktif'

slowlog = log/$pool.log.lambat
#慢请求的记录日志, gunakan dengan request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Nilai default: Pegangan terbuka default adalah 1024, yang dapat dilihat dengan ulimit -n dan dimodifikasi oleh ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Nilai yang tersedia: 'tidak terbatas', 0 atau bilangan bulat positif. Nilai default: Nilai yang ditentukan sistem.

chroot =
#启动时的Chroot目录. Direktori yang ditentukan harus berupa jalur absolut. Jika tidak ada pengaturan, chroot tidak digunakan.

chdir =
#设置启动目录, Chdir secara otomatis dikirim ke direktori itu saat dimulai. Direktori yang ditentukan harus berupa jalur absolut. Default: direktori saat ini, atau/direktori (saat chrooted)

catch_workers_output = ya
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Jika tidak diatur, stdout dan stderr akan dialihkan ke /dev/null sesuai dengan aturan FastCGI. Default: Null.



Penyetelan parameter php-fpm

pm = dinamis; Menunjukkan metode manajemen kuantitas proses mana yang digunakan

Dinamis berarti jumlah proses PHP-FPM bersifat dinamis, jumlahnya pm.start_servers ditentukan di awal, jika ada lebih banyak permintaan, secara otomatis akan meningkat untuk memastikan bahwa jumlah proses menganggur tidak kurang dari pm.min_spare_servers, dan jika jumlah prosesnya besar, itu juga akan dibersihkan sesuai untuk memastikan bahwa jumlah proses berlebih tidak lebih dari pm.max_spare_servers

Statis berarti bahwa jumlah proses dalam php-fpm bersifat statis, dan jumlah proses selalu merupakan angka yang ditentukan oleh pm.max_children, dan tidak bertambah atau berkurang

pm.max_anak = 300; Jumlah proses php-fpm yang diaktifkan dalam mode statis
pm.start_servers = 20; Jumlah proses php-fpm yang dimulai dalam mode dinamis
pm.min_spare_servers = 5; Jumlah minimum proses php-fpm dalam mode dinamis
pm.max_server_cadangan = 35; Jumlah maksimum proses php-fpm dalam mode dinamis

Jika pm statis, maka hanya parameter pm.max_children yang valid. Sistem akan membuka sejumlah proses php-fpm

Jika PM dinamis, maka parameter pm.max_children tidak valid, dan tiga parameter terakhir akan diterapkan. Sistem akan memulai pm.start_servers proses php-fpm di awal eksekusi php-fpm, dan kemudian secara dinamis menyesuaikan jumlah proses php-fpm antara pm.min_spare_servers dan pm.max_spare_servers sesuai dengan kebutuhan sistem

Jadi, metode PM mana yang lebih baik untuk dipilih untuk server kita? Faktanya, seperti Apache, menjalankan program PHP kurang lebih akan memiliki masalah kebocoran memori setelah eksekusi. Inilah sebabnya mengapa proses php-fpm hanya menempati sekitar 3M memori di awal, dan setelah berjalan sebentar, itu akan naik menjadi 20-30M.

Untuk server dengan memori besar (seperti 8G atau lebih), sebenarnya lebih tepat untuk menentukan max_children statis, karena ini tidak memerlukan kontrol proses tambahan dan meningkatkan efisiensi. Karena sering beralih proses php-fpm juga akan menunda waktu, akan lebih baik untuk mengaktifkan efek statis ketika memori cukup besar. Jumlahnya juga bisa didapatkan sesuai dengan memori/30M, misalnya memori 8GB bisa diatur ke 100, kemudian memori yang dikonsumsi php-fpm dapat dikontrol dalam 2G-3G. Jika memori sedikit lebih kecil, seperti 1G, maka menentukan jumlah proses statis lebih kondusif untuk stabilitas server. Ini memastikan bahwa php-fpm hanya mendapatkan memori yang cukup, dan mengalokasikan sejumlah kecil memori ke aplikasi lain, yang akan membuat sistem berjalan lebih lancar.

Untuk server dengan memori kecil, seperti VPS dengan memori 256M, meskipun dihitung sesuai dengan jumlah memori 20M, 10 proses php-cgi akan menghabiskan memori 200M, maka crash sistem seharusnya normal. Oleh karena itu, Anda harus mencoba mengontrol jumlah proses php-fpm, dan setelah mengklarifikasi secara kasar memori yang ditempati oleh aplikasi lain, tentukan angka kecil statis untuk itu, yang akan membuat sistem lebih stabil. Atau gunakan metode dinamis, karena metode dinamis akan mengakhiri proses redundan dan mendapatkan kembali sebagian memori, sehingga disarankan untuk menggunakannya di server atau VPS dengan memori yang lebih sedikit. Jumlah maksimum spesifik diperoleh berdasarkan memori/20M. Misalnya, untuk VPS 512M, disarankan untuk mengatur pm.max_spare_servers ke 20. Adapun pm.min_spare_servers, disarankan untuk mengaturnya sesuai dengan beban server, dan nilai yang lebih tepat adalah antara 5 ~ 10.

200 di server dengan memori 4G baik-baik saja (mesin uji 1G saya, 64 adalah yang terbaik, disarankan untuk menggunakan uji stres untuk mendapatkan nilai terbaik)

pm.max_permintaan = 10240;

Masalah terbesar dalam proses konfigurasi nginx php-fpm adalah masalah kebocoran internal: beban pada server tidak besar, tetapi pekerjaan memori meningkat dengan cepat, dengan cepat memakan memori dan kemudian mulai memakan partisi swap, dan sistem menutup telepon dengan cepat! Faktanya, menurut pengantar resmi, php-cgi tidak memiliki kebocoran memori, dan php-cgi akan merebut kembali memori setelah setiap permintaan selesai, tetapi tidak akan dirilis ke sistem operasi, yang akan menyebabkan sejumlah besar memori ditempati oleh php-cgi.


Solusi resminya adalah menurunkan nilai PHP_FCGI_MAX_REQUESTS, jika php-fpm digunakan, php-fpm.conf yang sesuai adalah max_requests, yang berarti berapa banyak permintaan yang akan dikirim untuk memulai ulang utas, kita perlu menurunkan nilai ini dengan tepat, sehingga php-fpm secara otomatis membebaskan memori, bukan sebagian besar 51200 di Internet, dll., Sebenarnya, ada nilai lain yang terkait dengannya max_ anak-anak, ini adalah berapa banyak proses yang akan dibuat setiap kali php-fpm, sehingga konsumsi memori sebenarnya adalah max_children*max_requests* Setiap permintaan menggunakan memori, menurut ini kita dapat memperkirakan penggunaan memori, jadi tidak perlu menulis skrip untuk membunuh.

request_terminate_timeout = 30;

Waktu eksekusi maksimum, dapat dikonfigurasi dalam php.ini (max_execution_time)

request_slowlog_timeout = 2; Mengaktifkan log lambat
slowlog = log/$pool.log.slow; Jalur log lambat

rlimit_files = 1024; Menambahkan batas php-fpm untuk membuka deskriptor file





Mantan:Analisis kegagalan pemeriksaan kesehatan HTTP penyeimbangan beban Alibaba Cloud SLB
Depan:Verifikasi file DZ x3.4 file yang hilang
 Tuan tanah| Diposting pada 28/11/2021 13.42.00 |
[Praktek] Periksa informasi status php-fpm melalui Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Tuan tanah| Diposting pada 19/12/2021 10.48.43 |
 Tuan tanah| Diposting pada 16/01/2022 15.26.55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep max_spare_servers
;             pm.max_spare_servers - jumlah maksimum turunan di 'idle'
; Nilai Default: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_server_cadangan = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep min_spare_servers
;             pm.min_spare_servers - jumlah minimum anak-anak dalam 'idle'
; Nilai Default: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 5
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep start_servers
;             pm.start_servers - jumlah anak yang dibuat saat startup.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep max_requests
pm.max_permintaan = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep request_slowlog_timeout
; Catatan: slowlog adalah wajib jika request_slowlog_timeout diatur
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep Slowlog
; - 'slowlog'
; Catatan: slowlog adalah wajib jika request_slowlog_timeout diatur
slowlog = /alidata/log/php/$pool.log.slow
; dibuang ke file 'slowlog'. Nilai '0s' berarti 'mati'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Atur deskriptor file terbuka rlimit untuk proses master.
; rlimit_files = 1024
; Atur ukuran inti maksimum rlimit untuk proses master.
; rlimit_core = 0
; Atur deskriptor file terbuka rlimit.
; rlimit_files = 1024
; Atur ukuran inti maksimum rlimit.
; rlimit_core = 0
[root@old_server konferensi] #
 Tuan tanah| Diposting pada 16/01/2022 16.54.04 |
request_terminate_timeout = 10 detik

Nilai defaultnya adalah 0 detik, yang berarti skrip PHP akan terus dieksekusi. Dengan cara ini, ketika semua proses php-cgi sibuk, Nginx+PHP WebServer tidak lagi dapat menangani permintaan PHP baru, dan Nginx akan mengembalikan "502 Bad Gateway" kepada pengguna. request_terminate_timeout = 30 detik dapat digunakan
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com