Ο 8-πύρηνος VPS 24GB ξεμένει από μνήμη; Πρακτικός οδηγός για ακραίο συντονισμό διεργασιών PHP-FPM με το HestiaCP

Ο αριθμός των ταυτόχρονων χρηστών που μπορεί να χειριστεί ένας διακομιστής δεν εξαρτάται από τον αριθμό των πυρήνων που διαθέτει, αλλά από την ποσότητα μνήμης που καταναλώνει κάθε διεργασία.

Αυτή η δήλωση μπορεί να ακούγεται σαν πρόκληση, αλλά είναι η πιο πραγματική και οδυνηρή εμπειρία στον κλάδο λειτουργίας και συντήρησης.

Γιατί η μνήμη είναι το βασικό εμπόδιο;

Πολλοί άνθρωποι βλέπουν ένα VPS με 8-πύρηνο επεξεργαστή και 24GB μνήμης και υποσυνείδητα πιστεύουν ότι μπορούν εύκολα να εκτελέσουν εκατοντάδες διεργασίες PHP-FPM.

Ωστόσο, στην πραγματικότητα, η χρήση μνήμης RSS από μια μεμονωμένη διεργασία PHP είναι συχνά τόσο υψηλή όσο 200MB.

Αυτό είναι το αποτέλεσμα που λαμβάνεται μέσω πραγματικών δοκιμών μέσω γραμμής εντολών:

ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

Στο πολύπλοκο framework και το περιβάλλον πολλαπλών plugin της HestiaCP , ειδικά χωρίς βελτιστοποίηση OPcache, τα 200MB είναι ο κανόνας.

Αυτό σημαίνει ότι η μνήμη, όχι η CPU, είναι το αυστηρό όριο που καθορίζει τη μέγιστη ταυτόχρονη λειτουργία.

Ο 8-πύρηνος VPS 24GB ξεμένει από μνήμη; Πρακτικός οδηγός για ακραίο συντονισμό διεργασιών PHP-FPM με το HestiaCP

Προτεινόμενο αρχείο διαμόρφωσης (php-fpm.conf)

pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s

Λογική υπολογισμού παραμέτρων και βάση ρύθμισης

Παράμετροι διαμόρφωσηςΡύθμιση τιμήςΥπολογισμός πυρήνα και βάση ρύθμισης
pmdynamicΗ δυναμική λειτουργία επιτρέπει την ελαστική προσθήκη ή διαγραφή διεργασιών με βάση τις απαιτήσεις ταυτόχρονης λειτουργίας, εξισορροπώντας την ταχύτητα απόκρισης και τη χρήση μνήμης.
μ.μ.max_children8024GB συνολικής μνήμης μείον τον πυρήνα συστήματος και MySQL/ΡέντηΜετά το Nginx, απομένουν περίπου 16GB για PHP.16,384 MB / 200 MB ≈ 81.9Η ρύθμιση στο 80 μπορεί να εξαλείψει εντελώς το OOM (Out of Memory) κατά τη διάρκεια υψηλής ταυτόχρονης λειτουργίας.
pm.start_servers16Η προθέρμανση κατά την εκκίνηση έχει οριστεί στο διπλάσιο αριθμό πυρήνων της CPU (8 πυρήνες × 2 = 16) για να διασφαλιστεί ότι η υπηρεσία μπορεί να χειριστεί άμεσα τον βασικό ταυτόχρονο έλεγχο μετά την επανεκκίνηση.
pm.min_spare_servers8Ορίστε τον αριθμό πυρήνων CPU σε 8 πυρήνες για να διασφαλίσετε ότι τα νέα αιτήματα μπορούν να απαντηθούν ανά πάσα στιγμή κατά τη διάρκεια περιόδων χαμηλής επισκεψιμότητας.
pm.max_spare_servers24Ρυθμίστε το στο 3 φορές τον αριθμό των πυρήνων της CPU (8 πυρήνες × 3 = 24) για να διατηρήσετε έναν μέτριο αριθμό διεργασιών μετά την υποχώρηση της κυκλοφορίας, προκειμένου να χειριστείτε μικρές διακυμάνσεις.
pm.max_requests500Εάν μια μεμονωμένη διεργασία φτάσει σε μια μεγάλη βάση 200MB, η μείωση του αριθμού των αιτημάτων σε 500 πριν από την καταστροφή και την ανακατασκευή μπορεί να καθαρίσει τις έμμεσες διαρροές μνήμης πιο γρήγορα.
pm.process_idle_timeout10sΥπερβολικός min_spare_servers Οι αδρανείς διεργασίες αποδεσμεύονται αυτόματα και επιστρέφουν στη μνήμη του συστήματος μετά από 10 δευτερόλεπτα χωρίς αιτήματα.

Βασικές υποστηρικτικές ρυθμίσεις και προτάσεις βελτιστοποίησης

1. Μηχανισμός χρονικού ορίου κατά του hangover

request_terminate_timeout = 60s Αυτό είναι το κλειδί.

Μπορεί να τερματίσει αναγκαστικά διεργασίες που έχουν κολλήσει λόγω αδιεξόδου στη βάση δεδομένων ή αποκλεισμού API τρίτων.

Εν τω μεταξύ, η Nginx's fastcgi_read_timeout Πρέπει να διατηρηθεί για τουλάχιστον 60 δευτερόλεπτα, διαφορετικά ο πελάτης θα το λάβει πρόωρα. 504 Gateway Timeout.

2. Στρατηγικές για την αντιμετώπιση των εμποδίων μνήμης

Ένα μέγιστο 80 ταυτόχρονων διεργασιών σημαίνει ότι υπό ακραίες συνθήκες ταυτόχρονης σύνδεσης, το σύστημα μπορεί να χειριστεί ταυτόχρονα έως και 80 δυναμικά αιτήματα HTTP.

Εάν θέλετε να βελτιώσετε περαιτέρω τη χωρητικότητα, η εστίαση θα πρέπει να είναι στη μείωση της χρήσης μνήμης ανά διεργασία.

  • Ενεργοποίηση OPcache:υπάρχω php.ini Μεσαία διαμόρφωση opcache.enable=1 及 opcache.memory_consumption=256Η προσωρινή αποθήκευση bytecode μπορεί να μειώσει τη χρήση μνήμης μιας μεμονωμένης διεργασίας από 200MB σε 60~100MB.
  • Λογικός έλεγχος του memory_limit:Θα php.ini μεσαίου memory_limit Περιορίζεται σε 128M Ή 256MΓια την αποτροπή μεμονωμένων μη φυσιολογικών σεναρίωναπεριόριστοςΚαταναλώνει πολλή μνήμη.

Μόλις η χρήση μνήμης μιας μεμονωμένης διεργασίας μειωθεί στα 100MB...pm.max_children Μπορεί να αναβαθμιστεί με ασφάλεια σε 150 Επιπλέον, η δυνατότητα ταυτόχρονης λειτουργίας έχει σχεδόν διπλασιαστεί.

Αναφέρθηκαν έγκυρες απόψεις

Σύμφωνα με τις συστάσεις στην επίσημη τεκμηρίωση του Nginx :

«Οι εφαρμογές FastCGI θα πρέπει πάντα να παρακολουθούνται με οδηγίες χρονικού ορίου για την αποφυγή εξάντλησης των πόρων.»
(Πηγή: Nginx Docs)

Το επίσημο εγχειρίδιο PHP αναφέρει ξεκάθαρα:

"Το pm.max_children ορίζει τον μέγιστο αριθμό θυγατρικών διεργασιών που θα δημιουργηθούν. Αυτή είναι η πιο σημαντική οδηγία."
(Πηγή: Τεκμηρίωση PHP-FPM)

Αυτές οι έγκυρες απόψεις ευθυγραμμίζονται απόλυτα με τις πρακτικές μας, αποδεικνύοντας ότι η λογική βελτιστοποίησης δεν βασίζεται μόνο στην εμπειρία, αλλά και σε τυποποιημένες βέλτιστες πρακτικές.

Συμπέρασμα: Οι απόψεις μου και τα βασικά αποσπάσματα

Σε σενάρια υψηλής ταυτόχρονης λειτουργίας, η CPU είναι η μηχανή, η μνήμη είναι η δεξαμενή καυσίμου και το PHP-FPM είναι ο διαχειριστής του στόλου.

Όσο ισχυρός και αν είναι ο κινητήρας, αν η δεξαμενή καυσίμου δεν είναι αρκετά μεγάλη, η συνοδεία δεν θα πάει πολύ μακριά.

Οι πραγματικοί ειδικοί δεν μεγιστοποιούν τυφλά τις παραμέτρους, αλλά υπολογίζουν με ακρίβεια τη χρήση μνήμης κάθε διεργασίας για να αποφύγουν τόσο την σπατάλη όσο και την υπερχείλιση.

Η ουσία της βελτιστοποίησης είναι η εύρεση της βέλτιστης ισορροπίας με περιορισμένους πόρους.

Αυτό δεν είναι απλώς μια τεχνολογία, αλλά και μια φιλοσοφία.

Επομένως, σταματήστε να πιστεύετε ότι «ο αριθμός των πυρήνων καθορίζει τα πάντα». Αυτό που πραγματικά καθορίζει το όριο ταυτόχρονης λειτουργίας είναι ο έλεγχός σας στη μνήμη.

Αναλάβετε δράση και βελτιστοποιήστε το VPS σας στο μέγιστο των δυνατοτήτων του, αξιοποιώντας στο έπακρο κάθε σταγόνα μνήμης.

Ας ελπίσουμε ότι το άρθρο "8-core 24GB VPS rest out of memory? Extreme tuning of PHP-FPM process pool under HestiaCP" που κοινοποιήθηκε στο ιστολόγιο του Chen Weiliang ( https://www.chenweiliang.com/ ) θα σας φανεί χρήσιμο.

Μη διστάσετε να κοινοποιήσετε τον σύνδεσμο αυτού του άρθρου: https://www.chenweiliang.com/cwl-34509.html

Για να ξεκλειδώσετε περισσότερα κρυμμένα κόλπα🔑, καλώς ήρθατε στο κανάλι μας στο Telegram!

Κάντε share και like αν σας αρέσει! Τα share και τα likes σας είναι το συνεχές μας κίνητρο!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Μεταβείτε στην κορυφή