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
|