Μετά την επιλογή του προτύπου "phpfcgid" για την υπηρεσία web VestaCP , ένας μεγάλος αριθμός διεργασιών PHP-CGI εξάντλησε γρήγορα τη μνήμη.
- Ουσιαστικά είχα εξαντληθεί η μνήμη για μερικές ώρες μετά την επανεκκίνηση του διακομιστή.
- Η προηγουμένως αδρανής διαδικασία PHP-CGI δεν σκοτώνεται και μία διεργασία εκτελεί σχεδόν 1 υποδιεργασίες, καταναλώνοντας τουλάχιστον 20M μνήμης.
Χρησιμοποιείται σε SSH htop εντολή (απαιτείται εγκατάσταση), μπορείτε να δείτε αυτήν την κατάσταση ▼

Εάν λάβετε ένα μήνυμα σφάλματος "-bash: htop: η εντολή δεν βρέθηκε" όταν χρησιμοποιείτε την εντολή htop, δείτε αυτό το σεμινάριο για τη λύση ▼
Ο μεγάλος αριθμός διεργασιών PHP-CGI προκάλεσε γρήγορη εξάντληση της μνήμης. Το πρόβλημα έγκειται στο γεγονός ότι το VestaCP χρησιμοποιεί μια μη βελτιστοποιημένη διαμόρφωση στο πρότυπο phpfcgid του CentOS .
- Το VestaCP στο πρότυπο phpfcgid, ορίστε 1 διεργασία PHP-CGI για εκτέλεση έως και 20 θυγατρικών διεργασιών.
Βλέπω /usr/local/vesta/data/templates/web/httpd/phpfcgid.sh Γραμμή 13 του αρχείου:
export PHP_FCGI_CHILDREN=20
Ωστόσο, μια τέτοια ρύθμιση παραβιάζει την προειδοποίηση του Apache στην τεκμηρίωση διαχείρισης υποδιαδικασίας PHP:
Η διαχείριση θυγατρικών διεργασιών PHP ( PHP_FCGI_CHILDREN ) θα πρέπει πάντα να απενεργοποιείται με το mod_fcgid, το οποίο θα δρομολογεί μόνο ένα αίτημα κάθε φορά στις διεργασίες εφαρμογής που έχει δημιουργήσει. Επομένως, τυχόν θυγατρικές διεργασίες που δημιουργούνται από την PHP δεν θα χρησιμοποιούνται αποτελεσματικά. (Επιπλέον, οι θυγατρικές διεργασίες PHP ενδέχεται να μην τερματιστούν σωστά.) Από προεπιλογή, και με τη μεταβλητή περιβάλλοντος PHP_FCGI_CHILDREN=0 , η διαχείριση θυγατρικών διεργασιών PHP είναι απενεργοποιημένη.
Επειδή στη λειτουργική μονάδα mod_fcgid του Apache, η διαδικασία PHP-CGI μπορεί να ανταποκριθεί μόνο σε ένα αίτημα και να εκτελεστεί κάθε φορά, η θυγατρική διαδικασία PHP-CGI είναι πολύ αναποτελεσματική.
Επομένως, οι ρυθμίσεις για τη διαχείριση υποδιαδικασιών PHP θα πρέπει να απενεργοποιηθούν απευθείας ▼
PHP_FCGI_CHILDREN=0
Ταυτόχρονα, εάν έχετε ήδη δημιουργήσει έναν εικονικό κεντρικό υπολογιστή, θα πρέπει να τροποποιήσετε τα αρχεία διαμόρφωσης όλων των ιστότοπων ▼
/home/用户名/web/域名/cgi-bin/fcgi-starter
Αφού ανοίξετε το αρχείο διαμόρφωσης fcgi-starter, εισαγάγετε το ακόλουθο ▼
export PHP_FCGI_CHILDREN=20
Τροποποίηση σε ▼
export PHP_FCGI_CHILDREN=0
- Μετά την τροποποίηση, η διαχείριση υποδιεργασίας PHP θα απενεργοποιηθεί στη λειτουργία mod_fcgid.
- Η διαδικασία PHP-CGI δεν θα δημιουργεί πλέον θυγατρικές διεργασίες, οι οποίες μπορούν να εξοικονομήσουν πολλή μνήμη.
Επίσης, το VestaCP δεν ορίζει μηχανισμό τερματισμού για διαδικασίες αδράνειας:
- Όλες οι διεργασίες PHP-CGI που εκτελέστηκαν πρόσφατα θα συνεχίσουν να χρησιμοποιούν μνήμη μέχρι να επανεκκινηθεί το σύστημα.
Για να το διορθώσετε αυτό, απλώς προσθέστε το αρχείο διαμόρφωσης mod_fcgid /etc/httpd/conf.d/fcgid.conf Προσθέστε τις ακόλουθες ρυθμίσεις στο ▼
FcgidIdleTimeout 120
- Ρυθμίστε το Apache να σκοτώνει αυτόματα τις διεργασίες PHP-CGI που είναι αδρανείς για 2 λεπτά (120 δευτερόλεπτα).
Αφού ολοκληρωθεί η εγκατάσταση, επανεκκινήστε την υπηρεσία Apache ▼
service httpd restart
Μετά την επανεκκίνηση της υπηρεσίας, οι εκατοντάδες διεργασίες PHP-CGI που εμφανίζονταν προηγουμένως στο HTOP δεν θα εμφανίζονται πλέον.
Συνήθως, μια μεμονωμένη διεργασία PHP-CGI για έναν μόνο χρήστη Vesta CP καταναλώνει 30 έως 40 MB μνήμης, η οποία είναι υπεραρκετή για έναν κεντρικό υπολογιστή Linux.
Επομένως, η βελτιστοποίηση της διαμόρφωσης του περιεχομένου και των προτύπων της Vesta είναι ζωτικής σημασίας για τους διαδικτυακούς εμπόρους που θέλουν να διαπρέψουν στο SEO .
Μπορείτε να ρίξετε μια ματιά στα παρακάτω σεμινάρια στον πίνακα VestaCP ▼
Ας ελπίσουμε ότι το άρθρο "Optimising VestaCP phpfcgid template configuration for 'Multiple Processes, Memory Exhaustion 500 Error'" που κοινοποιήθηκε στο ιστολόγιο του Chen Weiliang ( https://www.chenweiliang.com/ ) θα σας φανεί χρήσιμο.
Μη διστάσετε να κοινοποιήσετε τον σύνδεσμο αυτού του άρθρου: https://www.chenweiliang.com/cwl-735.html



