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 για το άνοιγμα περιγραφέων αρχείων
|