Ρύθμιση PHP-FPM: χρησιμοποιήστε pm static για μέγιστη απόδοση

Ρύθμιση PHP-FPM: χρησιμοποιήστε pm static για μέγιστη απόδοση

Μια μη επεξεργασμένη έκδοση αυτού του άρθρου δημοσιεύθηκε αρχικά στις haydenjames.io και δημοσιεύτηκε εδώ με την άδειά της ο συγγραφέας.

Θα σας πω εν συντομία πώς να ρυθμίσετε καλύτερα το PHP-FPM για να αυξήσετε την απόδοση, να μειώσετε την καθυστέρηση και να χρησιμοποιήσετε τη CPU και τη μνήμη με μεγαλύτερη συνέπεια. Από προεπιλογή, η γραμμή PM (διαχειριστής διεργασιών) στο PHP-FPM είναι δυναμικός, και αν δεν έχετε αρκετή μνήμη, τότε είναι καλύτερα να το εγκαταστήσετε κατα παραγγελια. Ας συγκρίνουμε 2 επιλογές ελέγχου με βάση την τεκμηρίωση του php.net και ας δούμε πώς διαφέρει το αγαπημένο μου από αυτές στατικός μ.μ. για μεγάλη κίνηση:

μ.μ. = δυναμική — ο αριθμός των θυγατρικών διεργασιών διαμορφώνεται δυναμικά με βάση τις ακόλουθες οδηγίες: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
μ.μ. = κατ' απαίτηση - οι διεργασίες δημιουργούνται κατ' απαίτηση (σε αντίθεση με τη δυναμική δημιουργία, όταν εκκινούνται οι pm.start_servers όταν ξεκινά η υπηρεσία).
pm = στατικό — ο αριθμός των θυγατρικών διεργασιών είναι σταθερός και υποδεικνύεται από την παράμετρο μ.μ.max_children.

Για λεπτομέρειες, βλ πλήρης κατάλογος παγκόσμιων οδηγιών php-fpm.conf.

Ομοιότητες μεταξύ του διαχειριστή διεργασιών PHP-FPM και του ελεγκτή συχνότητας της CPU

Αυτό μπορεί να φαίνεται εκτός θέματος, αλλά θα το συνδέσω με το θέμα της διαμόρφωσης PHP-FPM. Ποιος δεν έχει αντιμετωπίσει επιβράδυνση του επεξεργαστή τουλάχιστον μία φορά - σε φορητό υπολογιστή, εικονική μηχανή ή αποκλειστικό διακομιστή; Θυμάστε την κλιμάκωση συχνότητας CPU; Αυτές οι επιλογές είναι διαθέσιμες για Το nix και τα Windows μπορούν να βελτιώσουν την απόδοση και την απόκριση του συστήματος αλλάζοντας τη ρύθμιση του γκαζιού του επεξεργαστή από κατα παραγγελια επί εκτέλεση*. Αυτή τη φορά, ας συγκρίνουμε τις περιγραφές και ας δούμε τις ομοιότητες:

κυβερνήτης=απαιτώ — δυναμική κλιμάκωση της συχνότητας του επεξεργαστή ανάλογα με το τρέχον φορτίο. Μεταβαίνει γρήγορα στη μέγιστη συχνότητα και στη συνέχεια τη μειώνει καθώς αυξάνονται οι περίοδοι αδράνειας.
κυβερνήτης=συντηρητικός= δυναμική κλιμάκωση συχνότητας ανάλογα με το τρέχον φορτίο. Αυξάνει και μειώνει τη συχνότητα πιο ομαλά από ό,τι κατά παραγγελία.
Κυβερνήτης = απόδοση — η συχνότητα είναι πάντα μέγιστη.

Για λεπτομέρειες, βλ πλήρης λίστα των παραμέτρων του ρυθμιστή συχνότητας επεξεργαστή.

Βλέπετε τις ομοιότητες; Ήθελα να δείξω αυτήν τη σύγκριση για να σας πείσω ότι είναι καλύτερο να το χρησιμοποιήσετε μ.μ στατική για PHP-FPM.

Για την παράμετρο ρυθμιστή επεξεργαστή επίδοση βοηθά στην ασφαλή αύξηση της απόδοσης επειδή εξαρτάται σχεδόν εξ ολοκλήρου από το όριο CPU του διακομιστή. Εκτός από αυτό, φυσικά, υπάρχουν και παράγοντες όπως η θερμοκρασία, η φόρτιση της μπαταρίας (σε φορητό υπολογιστή) και άλλες παρενέργειες της συνεχούς λειτουργίας του επεξεργαστή στο 100%. Η ρύθμιση απόδοσης εξασφαλίζει την ταχύτερη απόδοση του επεξεργαστή. Διαβάστε, για παράδειγμα, σχετικά Παράμετρος force_turbo στο Raspberry Pi, με το οποίο ο πίνακας RPi θα χρησιμοποιήσει τον ρυθμιστή επίδοση, όπου η βελτίωση της απόδοσης θα είναι πιο αισθητή λόγω της χαμηλής ταχύτητας ρολογιού της CPU.

Χρήση pm static για την επίτευξη μέγιστης απόδοσης διακομιστή

Επιλογή PHP-FPM μ.μ στατική εξαρτάται σε μεγάλο βαθμό από την ελεύθερη μνήμη του διακομιστή. Εάν η μνήμη είναι χαμηλή, είναι καλύτερα να επιλέξετε κατα παραγγελια ή δυναμικός. Από την άλλη πλευρά, εάν έχετε μνήμη, μπορείτε να αποφύγετε την επιβάρυνση του διαχειριστή διεργασιών PHP ρυθμίζοντας pm στατικός στη μέγιστη χωρητικότητα διακομιστή. Με άλλα λόγια, εάν όλα υπολογίζονται καλά, πρέπει να εδραιωθείτε μ.μ.στατικός στον μέγιστο όγκο των διεργασιών PHP-FPM που μπορούν να εκτελεστούν, χωρίς να δημιουργεί προβλήματα με χαμηλή μνήμη ή cache. Αλλά όχι τόσο υψηλό ώστε να κατακλύζει τους επεξεργαστές και να συσσωρεύει ένα σωρό λειτουργίες PHP-FPM που περιμένουν να εκτελεστούν.

Ρύθμιση PHP-FPM: χρησιμοποιήστε pm static για μέγιστη απόδοση

Στο παραπάνω στιγμιότυπο οθόνης, ο διακομιστής έχει pm = στατικό και pm.max_children = 100, και αυτό καταλαμβάνει περίπου 10 GB από τα διαθέσιμα 32. Δώστε προσοχή στις επισημασμένες στήλες, όλα είναι ξεκάθαρα εδώ. Σε αυτό το στιγμιότυπο οθόνης υπήρχαν περίπου 200 ενεργοί χρήστες (πάνω από 60 δευτερόλεπτα) στο Google Analytics. Σε αυτό το επίπεδο, περίπου το 70% των θυγατρικών διεργασιών PHP-FPM είναι ακόμα σε αδράνεια. Αυτό σημαίνει ότι το PHP-FPM ρυθμίζεται πάντα στο μέγιστο ποσό των πόρων διακομιστή ανεξάρτητα από την τρέχουσα επισκεψιμότητα. Μια διαδικασία αδράνειας περιμένει να κορυφωθεί η κυκλοφορία και ανταποκρίνεται αμέσως. Δεν χρειάζεται να περιμένετε μέχρι pm θα δημιουργήσει θυγατρικές διαδικασίες και στη συνέχεια θα τις τερματίσει όταν λήξει η περίοδος pm.process_idle_timeout. Έβαλα την τιμή σε πολύ υψηλή pm.max_requestsεπειδή αυτός είναι ένας διακομιστής που λειτουργεί χωρίς διαρροές μνήμης στην PHP. Μπορείτε να εγκαταστήσετε pm.max_requests = 0 με static αν είστε απόλυτα σίγουροι για τα υπάρχοντα και μελλοντικά σενάρια PHP. Αλλά είναι καλύτερα να επαναλαμβάνετε τα σενάρια με την πάροδο του χρόνου. Ορίστε μεγάλο αριθμό αιτημάτων, γιατί θέλουμε να αποφύγουμε τα περιττά έξοδα pm. Για παράδειγμα, τουλάχιστον pm.max_requests = 1000 - ανάλογα με την ποσότητα μ.μ.max_children και τον αριθμό των αιτημάτων ανά δευτερόλεπτο.

Το στιγμιότυπο οθόνης δείχνει την εντολή Κορυφή Linux, φιλτραρισμένο κατά u (χρήστης) και όνομα χρήστη PHP-FPM. Εμφανίζονται μόνο οι πρώτες 50 περίπου διεργασίες (δεν μέτρησα ακριβώς), αλλά ουσιαστικά η κορυφή δείχνει τα κορυφαία στατιστικά στοιχεία που ταιριάζουν στο παράθυρο του τερματικού. Σε αυτήν την περίπτωση ταξινομείται κατά % CPU (%CPU). Για να δείτε και τις 100 διεργασίες PHP-FPM, εκτελέστε την εντολή:

top -bn1 | grep php-fpm

Πότε να χρησιμοποιείτε το pm ondemand και δυναμικό

Εάν χρησιμοποιείτε pm δυναμικός, εμφανίζονται σφάλματα όπως αυτό:

WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children

Δοκιμάστε να αλλάξετε την παράμετρο, το σφάλμα δεν θα εξαφανιστεί, όπως περιγράφεται σε αυτήν την ανάρτηση στο Serverfault. Σε αυτήν την περίπτωση, η τιμή pm.min ήταν πολύ μικρή και επειδή η επισκεψιμότητα ιστού ποικίλλει τόσο πολύ και έχει υψηλές κορυφές και βαθιές κοιλάδες, είναι δύσκολο να προσαρμόσετε επαρκώς τις μ.μ. δυναμικός. Συνήθως χρησιμοποιείται pm κατα παραγγελια, όπως προτείνεται στην ίδια ανάρτηση. Αλλά αυτό είναι ακόμη χειρότερο, γιατί κατα παραγγελια τερματίζει τις διαδικασίες αδράνειας στο μηδέν όταν υπάρχει λίγη ή καθόλου επισκεψιμότητα και θα εξακολουθείτε να καταλήγετε με τα γενικά έξοδα αλλαγής της κυκλοφορίας. Εκτός, φυσικά, αν ορίσετε έναν τεράστιο χρόνο αναμονής. Και τότε είναι καλύτερο να το χρησιμοποιήσετε μ.μ.στατικός + υψηλός αριθμός pm.max_requests.

PM δυναμικός και ειδικά κατα παραγγελια μπορεί να σας φανεί χρήσιμο εάν διαθέτετε πολλές ομάδες PHP-FPM. Για παράδειγμα, φιλοξενείτε πολλούς λογαριασμούς cPanel ή πολλούς ιστότοπους σε διαφορετικές ομάδες. Έχω έναν διακομιστή με, ας πούμε, 100+ λογαριασμούς cpanel και περίπου 200 τομείς, και το pm.static ή ακόμα και το δυναμικό δεν θα με σώσει. Το μόνο που χρειάζεστε εδώ είναι κατα παραγγελια, σε τελική ανάλυση, περισσότερα από τα δύο τρίτα των ιστότοπων λαμβάνουν μικρή ή καθόλου επισκεψιμότητα και με κατα παραγγελια όλες οι παιδικές διεργασίες θα πέσουν, κάτι που θα μας εξοικονομήσει πολλή μνήμη! Ευτυχώς, οι προγραμματιστές του cPanel το παρατήρησαν και έθεσαν την τιμή στην προεπιλογή κατα παραγγελια. Παλαιότερα, όταν ήταν η προεπιλογή δυναμικός, το PHP-FPM δεν ήταν καθόλου κατάλληλο για απασχολημένους κοινόχρηστους διακομιστές. Πολλοί έχουν χρησιμοποιήσει suPHP, γιατί μ.μ δυναμικός καταναλώνεται μνήμη ακόμη και με αδρανείς ομάδες και λογαριασμούς cPanel PHP-FPM. Πιθανότατα, εάν η κίνηση είναι καλή, δεν θα φιλοξενηθείτε σε διακομιστή με μεγάλο αριθμό PHP-FPM pool (κοινόχρηστη φιλοξενία).

Συμπέρασμα

Εάν χρησιμοποιείτε PHP-FPM και η επισκεψιμότητά σας είναι μεγάλη, οι διαχειριστές διεργασιών κατα παραγγελια и δυναμικός για PHP-FPM θα είναι περιορισμένη απόδοση λόγω των εγγενών γενικών εξόδων τους. Κατανοήστε το σύστημά σας και διαμορφώστε τις διεργασίες PHP-FPM σύμφωνα με τη μέγιστη χωρητικότητα διακομιστή. Πρώτο σετ μ.μ.max_children ανάλογα με τη μέγιστη χρήση pm δυναμικός ή κατα παραγγελιακαι, στη συνέχεια, αυξήστε αυτήν την τιμή σε ένα επίπεδο όπου η μνήμη και ο επεξεργαστής θα λειτουργούν χωρίς υπερφόρτωση. Θα παρατηρήσετε ότι με μ.μ στατική, δεδομένου ότι έχετε τα πάντα στη μνήμη, οι αυξήσεις της κυκλοφορίας θα προκαλέσουν λιγότερες αιχμές της CPU με την πάροδο του χρόνου και οι μέσοι όροι φόρτωσης διακομιστή και CPU θα εξισωθούν. Το μέσο μέγεθος διεργασίας PHP-FPM εξαρτάται από τον διακομιστή ιστού και απαιτεί μη αυτόματη ρύθμιση παραμέτρων, επομένως οι πιο αυτοματοποιημένοι διαχειριστές διεργασιών είναι δυναμικός и κατα παραγγελια - πιο δημοφιλής. Ελπίζω το άρθρο να ήταν χρήσιμο.

UPD Προστέθηκε γράφημα αναφοράς ab. Εάν οι διεργασίες PHP-FPM βρίσκονται στη μνήμη, η απόδοση αυξάνεται σε βάρος της κατανάλωσης μνήμης εκεί όπου κάθονται και περιμένουν. Βρείτε την καλύτερη επιλογή για τον εαυτό σας.

Ρύθμιση PHP-FPM: χρησιμοποιήστε pm static για μέγιστη απόδοση

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο