Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 11218|Απάντηση: 4

Διαμόρφωση και συντονισμός παραμέτρων php-fpm

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 26/7/2017 9:20:54 π.μ. | | |
php-fpm.conf Οι σημαντικές παράμετροι εξηγούνται λεπτομερώς

pid = εκτέλεση/php-fpm.pid
#pid设置, συνιστάται να ενεργοποιήσετε το var/run/php-fpm.pid στον κατάλογο εγκατάστασης από προεπιλογή

error_log = ημερολόγιο/php-fpm.log
#错误日志, η προεπιλογή είναι var/log/php-fpm.log στον κατάλογο εγκατάστασης

log_level = ειδοποίηση
#错误级别. Τα διαθέσιμα επίπεδα είναι: ειδοποίηση, σφάλμα, προειδοποίηση, ειδοποίηση, εντοπισμός σφαλμάτων. Προεπιλογή: ειδοποίηση.

emergency_restart_threshold = 60
emergency_restart_interval = δεκαετία του '60
Το # υποδεικνύει ότι εάν ο αριθμός των διεργασιών php-cgi με σφάλματα SIGSEGV ή SIGBUS υπερβαίνει το emergency_restart_threshold εντός της τιμής emergency_restart_interval, το php-fpm θα επανεκκινηθεί ομαλά. Αυτές οι δύο επιλογές παραμένουν γενικά η προεπιλογή.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Διαθέσιμες μονάδες: s (δευτερόλεπτα), m (λεπτά), h (ώρες) ή d (ημέρες) Προεπιλεγμένες μονάδες: s (δευτερόλεπτα). Προεπιλογή: 0.

daemonize = ναι
#后台执行fpm, η προεπιλεγμένη τιμή είναι ναι και αν θέλετε να κάνετε εντοπισμό σφαλμάτων, μπορείτε να την αλλάξετε σε όχι. Στο FPM, μπορούν να χρησιμοποιηθούν διαφορετικές ρυθμίσεις για την εκτέλεση πολλαπλών ομάδων διεργασιών. Αυτές οι ρυθμίσεις μπορούν να οριστούν ξεχωριστά για κάθε χώρο συγκέντρωσης διεργασιών.

ακρόαση = 127.0.0.1:9000
#fpm监听端口, δηλαδή η διεύθυνση που επεξεργάζεται η PHP στο nginx, είναι γενικά η προεπιλεγμένη τιμή. Οι διαθέσιμες μορφές είναι: 'ip:port', 'port', '/path/to/unix/socket'. Κάθε ομάδα διεργασιών πρέπει να ρυθμιστεί.

listen.backlog = -1
#backlog数, -1 σημαίνει απεριόριστο, που καθορίζεται από το λειτουργικό σύστημα, απλώς σχολιάστε αυτήν τη γραμμή. Κωδικός: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP, ορίστε οποιοδήποτε ώστε να μην περιορίζει την IP, εάν θέλετε να ρυθμίσετε το nginx άλλων κεντρικών υπολογιστών για πρόσβαση σε αυτήν τη διαδικασία FPM, πρέπει να ορίσετε τη διεύθυνση IP στην οποία μπορείτε να έχετε πρόσβαση με το κόστος της ακρόασης. Η προεπιλεγμένη τιμή είναι οποιαδήποτε. Κάθε διεύθυνση χωρίζεται με κόμμα. Εάν δεν έχει οριστεί ή είναι κενό, οποιοσδήποτε διακομιστής επιτρέπεται να ζητήσει σύνδεση

listen.owner = www
listen.group = www
listen.mode = 0666
#unix επιλογή ρύθμισης υποδοχής, εάν χρησιμοποιείτε TCP για πρόσβαση, μπορείτε να σχολιάσετε εδώ.

χρήστης = www
ομάδα = www
#启动进程的帐户和组

pm = δυναμικό #对于专用服务器, το pm μπορεί να ρυθμιστεί σε στατικό.
#如何控制子进程, οι επιλογές είναι στατικές και δυναμικές. Εάν έχει επιλεγεί στατική, καθορίζεται ένας σταθερός αριθμός θυγατρικών διεργασιών από το pm.max_children. Εάν έχει επιλεγεί δυναμικό, καθορίζεται από τις ακόλουθες παραμέτρους:
pm.max_children #, ο μέγιστος αριθμός θυγατρικών διεργασιών
pm.start_servers #, ο αριθμός των διεργασιών κατά την εκκίνηση
pm.min_spare_servers #, εγγυηθείτε έναν ελάχιστο αριθμό αδρανών διεργασιών και δημιουργήστε μια νέα θυγατρική διεργασία εάν η αδρανής διεργασία είναι μικρότερη από αυτήν την τιμή
pm.max_spare_servers#, βεβαιωθείτε ότι ο μέγιστος αριθμός διεργασιών σε αδράνεια, εάν η διαδικασία αδράνειας είναι μεγαλύτερη από αυτήν την τιμή, αυτό θα καθαριστεί

pm.max_αιτήματα = 1000
#设置每个子进程重生之前服务的请求数. Αυτό είναι πολύ χρήσιμο για μονάδες τρίτων κατασκευαστών που ενδέχεται να έχουν διαρροές μνήμης. Εάν οριστεί σε '0', το αίτημα γίνεται πάντα αποδεκτό. Ισοδύναμο με PHP_FCGI_MAX_REQUESTS μεταβλητές περιβάλλοντος. Προεπιλογή: 0.

pm.status_path = /κατάσταση
#FPM状态页面的网址. Εάν δεν έχετε τις ρυθμίσεις, δεν μπορείτε να αποκτήσετε πρόσβαση στη σελίδα κατάστασης. Προεπιλογή: καμία. Θα χρησιμοποιηθεί η παρακολούθηση Munin

ping.path = /ping
#FPM监控页面的ping网址. Εάν δεν έχετε τις ρυθμίσεις, δεν μπορείτε να αποκτήσετε πρόσβαση στη σελίδα ping. Αυτή η σελίδα χρησιμοποιείται για τον εξωτερικό εντοπισμό εάν το FPM είναι ενεργό και μπορεί να ανταποκριθεί σε αιτήματα. Σημειώστε ότι πρέπει να ξεκινά με κάθετο (/).

ping.response = πονγκ
#用于定义ping请求的返回相应. Επιστρέφει κείμενο σε μορφή κειμένου/απλή για το HTTP 200. Προεπιλογή: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Αυτή η επιλογή μπορεί να είναι χρήσιμη για σενάρια που δεν ματαιώνονται για κάποιο ειδικό λόγο php.ini «max_execution_time» στις ρυθμίσεις. Η ρύθμιση σε '0' σημαίνει 'Απενεργοποίηση'. Μπορείτε να δοκιμάσετε να αλλάξετε αυτήν την επιλογή όταν εμφανίζονται συχνά σφάλματα 502.

request_slowlog_timeout = 10 δευτ.
#当一个请求该设置的超时时间后, οι αντίστοιχες πληροφορίες στοίβας κλήσεων PHP θα εγγραφούν στο αργό αρχείο καταγραφής. Η ρύθμιση σε «0» σημαίνει «Απενεργοποίηση»

slowlog = αρχείο καταγραφής/$pool.log.αργό
#慢请求的记录日志, χρησιμοποιήστε το με request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Προεπιλεγμένη τιμή: Η προεπιλεγμένη ανοιχτή λαβή είναι 1024, η οποία μπορεί να προβληθεί με ulimit -n και να τροποποιηθεί με ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Διαθέσιμες τιμές: «απεριόριστο», 0 ή θετικοί ακέραιοι αριθμοί. Προεπιλεγμένη τιμή: Τιμή καθορισμένη από το σύστημα.

chroot =
#启动时的Chroot目录. Ο καθορισμένος κατάλογος πρέπει να είναι μια απόλυτη διαδρομή. Εάν δεν υπάρχει ρύθμιση, το chroot δεν χρησιμοποιείται.

chdir =
#设置启动目录, το Chdir αποστέλλεται αυτόματα σε αυτόν τον κατάλογο κατά την εκκίνηση. Ο καθορισμένος κατάλογος πρέπει να είναι μια απόλυτη διαδρομή. Προεπιλογή: τρέχων κατάλογος, ή/κατάλογος (όταν είναι chrooted)

catch_workers_output = ναι
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Εάν δεν οριστεί, το stdout και το stderr θα ανακατευθυνθούν στο /dev/null σύμφωνα με τους κανόνες του FastCGI. Προεπιλογή: Null.



Συντονισμός παραμέτρων PHP-FPM

pm = δυναμική; Υποδεικνύει ποια μέθοδος διαχείρισης ποσότητας διεργασίας χρησιμοποιείται

Δυναμικό σημαίνει ότι ο αριθμός των διεργασιών PHP-FPM είναι δυναμικός, ο αριθμός καθορίζεται pm.start_servers στην αρχή, εάν υπάρχουν περισσότερα αιτήματα, θα αυξηθεί αυτόματα για να διασφαλιστεί ότι ο αριθμός των διεργασιών σε αδράνεια δεν είναι μικρότερος από pm.min_spare_servers και εάν ο αριθμός των διεργασιών είναι μεγάλος, θα καθαριστεί επίσης ανάλογα για να διασφαλιστεί ότι ο αριθμός των πλεοναζουσών διεργασιών δεν είναι μεγαλύτερος από pm.max_spare_servers

static σημαίνει ότι ο αριθμός των διεργασιών στην php-fpm είναι στατικός και ο αριθμός των διεργασιών είναι πάντα ο αριθμός που καθορίζεται από το pm.max_children και δεν αυξάνεται ή μειώνεται

pm.max_παιδιά = 300; Ο αριθμός των διεργασιών php-fpm που είναι ενεργοποιημένες σε στατική λειτουργία
pm.start_servers = 20; Ο αριθμός των διεργασιών εκκίνησης php-fpm σε δυναμική λειτουργία
pm.min_spare_servers = 5; Ο ελάχιστος αριθμός διεργασιών php-fpm σε δυναμική λειτουργία
pm.max_εφεδρικοί_διακομιστές = 35; Ο μέγιστος αριθμός διεργασιών php-fpm σε δυναμική λειτουργία

Εάν το pm είναι στατικό, τότε ισχύει μόνο η παράμετρος pm.max_children. Το σύστημα θα ανοίξει έναν καθορισμένο αριθμό διεργασιών php-fpm

Εάν το PM είναι δυναμικό, τότε η παράμετρος pm.max_children δεν είναι έγκυρη και οι τρεις τελευταίες παράμετροι τίθενται σε ισχύ. Το σύστημα θα ξεκινήσει pm.start_servers διεργασίες php-fpm στην αρχή της εκτέλεσης php-fpm και, στη συνέχεια, θα προσαρμόσει δυναμικά τον αριθμό των διεργασιών php-fpm μεταξύ pm.min_spare_servers και pm.max_spare_servers σύμφωνα με τις ανάγκες του συστήματος

Λοιπόν, ποια μέθοδος PM είναι καλύτερο να επιλέξουμε για τον διακομιστή μας; Στην πραγματικότητα, όπως ο Apache, η εκτέλεση προγραμμάτων PHP θα έχει λίγο πολύ προβλήματα διαρροής μνήμης μετά την εκτέλεση. Αυτός είναι ο λόγος για τον οποίο μια διαδικασία php-fpm καταλαμβάνει μόνο περίπου 3 εκατομμύρια μνήμη στην αρχή και αφού εκτελεστεί για λίγο, θα αυξηθεί στα 20-30 εκατομμύρια.

Για διακομιστές με μεγάλη μνήμη (όπως 8G ή περισσότερο), είναι στην πραγματικότητα πιο κατάλληλο να καθορίσετε στατικά max_children, καθώς αυτό δεν απαιτεί πρόσθετο έλεγχο της διαδικασίας και βελτιώνει την απόδοση. Επειδή η συχνή εναλλαγή των διεργασιών php-fpm θα καθυστερήσει επίσης το χρόνο, θα είναι καλύτερο να ενεργοποιήσετε τα στατικά εφέ όταν η μνήμη είναι αρκετά μεγάλη. Η ποσότητα μπορεί επίσης να ληφθεί σύμφωνα με τη μνήμη/30M, για παράδειγμα, η μνήμη 8 GB μπορεί να ρυθμιστεί στα 100 και, στη συνέχεια, η μνήμη που καταναλώνεται από το php-fpm μπορεί να ελεγχθεί σε 2G-3G. Εάν η μνήμη είναι ελαφρώς μικρότερη, όπως 1G, τότε ο καθορισμός του αριθμού των στατικών διεργασιών είναι πιο ευνοϊκός για τη σταθερότητα του διακομιστή. Αυτό διασφαλίζει ότι το php-fpm λαμβάνει μόνο αρκετή μνήμη και εκχωρεί μια μικρή ποσότητα μνήμης σε άλλες εφαρμογές, γεγονός που θα κάνει το σύστημα να λειτουργεί πιο ομαλά.

Για έναν διακομιστή με μικρή μνήμη, όπως ένα VPS με μνήμη 256M, ακόμα κι αν υπολογιστεί σύμφωνα με μια ποσότητα μνήμης 20M, 10 διεργασίες php-cgi θα καταναλώσουν μνήμη 200M, τότε η κατάρρευση του συστήματος θα πρέπει να είναι φυσιολογική. Επομένως, θα πρέπει να προσπαθήσετε να ελέγξετε τον αριθμό των διεργασιών php-fpm και αφού διευκρινίσετε κατά προσέγγιση τη μνήμη που καταλαμβάνουν άλλες εφαρμογές, καθορίστε έναν στατικό μικρό αριθμό για αυτήν, ο οποίος θα κάνει το σύστημα πιο σταθερό. Ή χρησιμοποιήστε τη δυναμική μέθοδο, επειδή η δυναμική μέθοδος θα τερματίσει την περιττή διαδικασία και θα ανακτήσει κάποια μνήμη, επομένως συνιστάται η χρήση της σε διακομιστές ή VPS με λιγότερη μνήμη. Το συγκεκριμένο μέγιστο ποσό λαμβάνεται με βάση τη μνήμη/20M. Για παράδειγμα, για ένα VPS 512M, συνιστάται να ορίσετε το pm.max_spare_servers σε 20. Όσον αφορά το pm.min_spare_servers, συνιστάται να το ρυθμίσετε ανάλογα με το φορτίο του διακομιστή και η πιο κατάλληλη τιμή είναι μεταξύ 5~10.

200 σε διακομιστή με μνήμη 4G είναι μια χαρά (η δοκιμαστική μου μηχανή 1G, 64 είναι η καλύτερη, συνιστάται η χρήση stress test για να έχετε την καλύτερη τιμή)

pm.max_αιτήματα = 10240;

Το μεγαλύτερο πρόβλημα στη διαδικασία διαμόρφωσης nginx php-fpm είναι το πρόβλημα εσωτερικής διαρροής: το φορτίο στον διακομιστή δεν είναι μεγάλο, αλλά η κατάληψη της μνήμης αυξάνεται γρήγορα, καταναλώνοντας γρήγορα τη μνήμη και στη συνέχεια αρχίζοντας να τρώει το διαμέρισμα swap και το σύστημα κλείνει γρήγορα! Στην πραγματικότητα, σύμφωνα με την επίσημη εισαγωγή, το php-cgi δεν έχει διαρροή μνήμης και το php-cgi θα ανακτήσει τη μνήμη μετά την ολοκλήρωση κάθε αιτήματος, αλλά δεν θα απελευθερωθεί στο λειτουργικό σύστημα, γεγονός που θα προκαλέσει την κατάληψη μεγάλης ποσότητας μνήμης από το php-cgi.


Η επίσημη λύση είναι να μειώσετε την τιμή του PHP_FCGI_MAX_REQUESTS, εάν χρησιμοποιείται php-fpm, το αντίστοιχο php-fpm.conf είναι το max_requests, που σημαίνει πόσα αιτήματα θα σταλούν για επανεκκίνηση του νήματος, πρέπει να μειώσουμε αυτήν την τιμή κατάλληλα, έτσι ώστε το php-fpm να ελευθερώνει αυτόματα μνήμη, όχι τα περισσότερα από τα 51200 στο Διαδίκτυο κ.λπ., στην πραγματικότητα, υπάρχει μια άλλη τιμή που σχετίζεται με αυτό max_ Παιδιά, Αυτός είναι ο αριθμός των διεργασιών που θα δημιουργούνται κάθε φορά php-fpm, έτσι ώστε η πραγματική κατανάλωση μνήμης να είναι max_children*max_requests* Κάθε αίτημα χρησιμοποιεί μνήμη, σύμφωνα με αυτό μπορούμε να υπολογίσουμε τη χρήση της μνήμης, οπότε δεν χρειάζεται να γράψουμε σενάρια για να σκοτώσουμε.

request_terminate_timeout = 30;

Μέγιστος χρόνος εκτέλεσης, με δυνατότητα διαμόρφωσης σε php.ini (max_execution_time)

request_slowlog_timeout = 2; Ενεργοποίηση αργών αρχείων καταγραφής
slowlog = log/$pool.log.slow; Αργή διαδρομή καταγραφής

rlimit_files = 1024; Προστέθηκε ένα όριο στο php-fpm για το άνοιγμα περιγραφέων αρχείων





Προηγούμενος:Ανάλυση αποτυχίας ελέγχου υγείας HTTP εξισορρόπησης φορτίου Alibaba Cloud SLB
Επόμενος:Αρχεία που λείπουν από την επαλήθευση αρχείων DZ X3.4
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 28/11/2021 1:42:00 μ.μ. |
[Εξάσκηση] Ελέγξτε τις πληροφορίες κατάστασης php-fpm μέσω του Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 19/12/2021 10:48:43 π.μ. |
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 16/1/2022 3:26:55 μ.μ. |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep max_spare_servers
;             pm.max_spare_servers - ο μέγιστος αριθμός παιδιών σε «αδράνεια»
; Προεπιλεγμένη τιμή: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_εφεδρικοί_διακομιστές = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep min_spare_servers
;             pm.min_spare_servers - ο ελάχιστος αριθμός παιδιών σε «αδράνεια»
; Προεπιλεγμένη τιμή: 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 - ο αριθμός των παιδιών που δημιουργήθηκαν κατά την εκκίνηση.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep max_requests
pm.max_αιτήματα = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep request_slowlog_timeout
; Σημείωση: Το slowlog είναι υποχρεωτικό εάν έχει οριστεί request_slowlog_timeout
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep slowlog
; - 'αργό ημερολόγιο'
; Σημείωση: Το slowlog είναι υποχρεωτικό εάν έχει οριστεί request_slowlog_timeout
slowlog = /alidata/log/php/$pool.log.slow
; στο αρχείο 'slowlog'. Η τιμή '0s' σημαίνει 'off'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Ορίστε το όριο περιγραφής ανοιχτού αρχείου για την κύρια διαδικασία.
; rlimit_files = 1024
; Ορίστε το μέγιστο όριο μεγέθους πυρήνα για την κύρια διαδικασία.
; rlimit_core = 0
; Ορίστε το όριο περιγραφής ανοιχτού αρχείου.
; rlimit_files = 1024
; Ορίστε το μέγιστο όριο μεγέθους πυρήνα.
; rlimit_core = 0
[root@old_server conf] #
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 16/1/2022 4:54:04 μ.μ. |
request_terminate_timeout = 10 δευτ.

Η προεπιλεγμένη τιμή είναι 0 δευτερόλεπτα, πράγμα που σημαίνει ότι το σενάριο PHP θα συνεχίσει να εκτελείται. Με αυτόν τον τρόπο, όταν όλες οι διεργασίες php-cgi είναι απασχολημένες, ο διακομιστής Web Nginx+PHP δεν μπορεί πλέον να χειριστεί νέα αιτήματα PHP και το Nginx θα επιστρέψει μια "502 Bad Gateway" στον χρήστη. request_terminate_timeout = 30 δευτερόλεπτα μπορούν να χρησιμοποιηθούν
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com