Κατάλογος άρθρου
- 1 Ο βασικός λόγος για τον οποίο το PHP-FPM είναι υπερφορτωμένο
- 2 Βελτιστοποίηση συγκέντρωσης διαδικασιών PHP-FPM (προσαρμογή παραμέτρων πυρήνα)
- 2.1 Ερώτημα για την έκδοση PHP που έχει οριστεί από το HestiaCP
- 2.2 www.conf: Η ενσωματωμένη «καθολική ομάδα πόρων» του συστήματος
- 2.3 etufo.org.conf: Προσαρμοσμένη ομάδα
- 2.4 dummy.conf: εικονικό αρχείο
- 2.5 Γιατί να χωρίσουμε την πισίνα;
- 2.6 实际场景
- 2.7 Σύγκριση διαμόρφωσης
- 2.8 1. Προσαρμόστε τις παραμέτρους της ομάδας διεργασιών PHP-FPM
- 2.9 2. Περιορίστε το χρόνο εκτέλεσης των σεναρίων PHP για να αποτρέψετε τη μακροχρόνια κατάληψη
- 3 Ενεργοποιήστε την παρακολούθηση κατάστασης PHP-FPM για να παρακολουθείτε την πρόοδο ανά πάσα στιγμή
- 4 Βελτιστοποιήστε τα αρχεία καταγραφής PHP-FPM για γρήγορη αντιμετώπιση προβλημάτων
- 5 Επανεκκινήστε τακτικά το PHP-FPM για να αποτρέψετε διαρροές μνήμης
- 6 Τι γίνεται αν το πρόβλημα επιμένει; Περαιτέρω βελτιστοποίηση!
- 7 Περίληψη: Βελτιστοποιήστε το PHP-FPM και ο ιστότοπος δεν θα διακοπεί πλέον!
Έχετε συναντήσει ποτέ αυτή την κατάσταση;Η πρόσβαση στον ιστότοπο επιβραδύνθηκε ξαφνικά ή οδήγησε σε σφάλμα 500 Μετά την επανεκκίνηση του PHP-FPM, επέστρεψε στο κανονικό., αλλά το πρόβλημα επανεμφανίζεται μετά από λίγο; Αυτό είναι τόσο απογοητευτικό!
Γιατί συμβαίνει αυτό?Στην πραγματικότητα, αυτό είναι συνήθωςΟ χώρος συγκέντρωσης διεργασιών PHP-FPM δεν έχει ρυθμιστεί σωστά ή οι πόροι του διακομιστή είναι ανεπαρκείς.που προκαλείται από. Σήμερα, θα βελτιστοποιήσουμε πλήρως HestiaCP Το PHP-FPM κάτω από την κουκούλα κάνει την ιστοσελίδα σταθερή σαν βράχος!
Ο βασικός λόγος για τον οποίο το PHP-FPM είναι υπερφορτωμένο
Το PHP-FPM είναι έναΔιαχειριστής Διαδικασιών, το οποίο είναι υπεύθυνο για το χειρισμό δυναμικών αιτημάτων. Εάν η διαμόρφωση δεν είναι λογική, μπορεί να οδηγήσει σε:
- Οι πόροι του διακομιστή έχουν εξαντληθεί, με αποτέλεσμα η PHP-FPM να μην μπορεί να απαντήσει εγκαίρως σε νέα αιτήματα.
- Πολύ λίγες διαδικασίες, όταν η κίνηση αυξάνεται ξαφνικά, δεν είναι δυνατή η έγκαιρη επεξεργασία της.
- Η χρήση της διαδικασίας είναι πολύ υψηλή, προκαλώντας έκρηξη του φορτίου της CPU.

Πώς να καταλάβετε εάν το PHP-FPM είναι υπερφορτωμένο;
μπορεί να χρησιμοποιηθεί top Ή htop Εντολή για προβολή της χρήσης της CPU και της μνήμης:
top -c
Εάν δείτε πληροφορίες διεργασίας παρόμοιες με τις παρακάτω, σημαίνει ότι το PHP-FPM εκτελείται υπό υψηλό φορτίο:
1669293 abc 20 0 790284 227880 185568 R 73.1 0.9 1:30.09 php-fpm: pool chenweiliang.com
1669522 abc 20 0 801924 224224 170236 R 69.9 0.9 0:59.01 php-fpm: pool chenweiliang.com
Δείτε πώς αυτές οι διεργασίες καταλαμβάνουν πάνω από το 70% της CPU; Εάν αυτό συμβαίνει συχνά, το PHP-FPM σας Πρέπει να υπάρχει πρόβλημα!
Λοιπόν, πώς μπορούμε να βελτιστοποιήσουμε τη διαμόρφωση PHP-FPM έτσι ώστε ο διακομιστής να μην είναι πλέον υπερφορτωμένος;
Βελτιστοποίηση συγκέντρωσης διαδικασιών PHP-FPM (προσαρμογή παραμέτρων πυρήνα)
Πρώτον, ανοίξτε php-fpm Αρχεία διαμόρφωσης:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Αλλάξτε την έκδοση PHP σας, όπως PHP8.3, και αλλάξτε την σε αυτήν:
/etc/php/8.3/fpm/pool.d/www.conf
Ερώτημα για την έκδοση PHP που έχει οριστεί από το HestiaCP
v-list-web-domain user domain.com
Π.χ:
v-list-web-domain abc chenweiliang.com
Στην έξοδο, θα δείτε κάτι σαν:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Αυτό σημαίνει ότι ο ιστότοπος χρησιμοποιεί PHP 8.3.
Ας ρίξουμε μια ματιά στη διαμόρφωση PHP-FPM σας:
[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660
user = abc
group = abc
pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s
Μπορείτε να δείτε ότι σας pm Αυτό που χρησιμοποιείται είναι ondemand,Αν και μπορεί να μειώσει τη χρήση πόρων κατά τη διάρκεια του χρόνου αδράνειας, όταν η κίνηση αυξάνεται ξαφνικά, η διαδικασία ενδέχεται να μην μπορεί να ανταποκριθεί έγκαιρα., με αποτέλεσμα ένα σφάλμα 500.
www.conf: Η ενσωματωμένη «καθολική ομάδα πόρων» του συστήματος
Μετά την εγκατάσταση του PHP-FPM, το σύστημα θα σας παρέχει αυτόματα ένα... www.conf αρχείο.
τουΘέσηΕίναι πολύ απλό—είναι απλώς μια προεπιλεγμένη ομάδα διεργασιών που λειτουργεί αμέσως μόλις την εγκαταστήσετε, συνήθως συνδεδεμένη σε... www-δεδομένα Λήψη από τον χρήστη.
Αυτός ο τύπος ομάδας είναι ιδιαίτερα κατάλληλος για περιβάλλοντα μίας τοποθεσίας: η διαμόρφωση είναι ελαφριά και οι παράμετροι είναι όλες γενικά πρότυπα, όπως:
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5
Αν φιλοξενείτε μόνο έναν ιστότοπο, μπορείτε να τον χρησιμοποιήσετε άμεσα και αξιόπιστα χωρίς καμία επιπλέον ταλαιπωρία.
etUFO.org.conf: Προσαρμοσμένη ομάδα
Μόλις διαχειρίζεστε πολλούς ιστότοπους, δεν μπορείτε να τους έχετε όλους στοιβαγμένους στην ίδια ομάδα.
Σε αυτό το σημείο, το HestiaCP θα δημιουργήσει αυτόματα μια ξεχωριστή ομάδα για κάθε τοποθεσία, για παράδειγμα... etUFO.org.confΕξειδικευμένο σε ονόματα τομέα etufo.org 服务.
Ο συνηθισμένος τρόπος παιχνιδιού είναι:
- Αλλαγή χρηστών και ομάδων:
user = etufo,group = etufo - Ανεξάρτητη παρακολούθηση:
listen = /run/php/etufo.sock - Η προσαρμογή του αριθμού των διεργασιών διασφαλίζει άψογη σταθερότητα ακόμη και υπό υψηλή ταυτόχρονη λειτουργία.
- Τα ξεχωριστά αρχεία καταγραφής κάνουν την αντιμετώπιση προβλημάτων πιο σαφή την εφαρμογή.
Τα οφέλη είναι προφανή:Ασφαλής απομόνωσηΑκόμα κι αν ένας ιστότοπος παραβιαστεί, οι άλλοι ιστότοποι θα παραμείνουν ανεπηρέαστοι.
dummy.conf: εικονικό αρχείο
dummy.conf Αυτά είναι συνήθως παραδείγματα ή πρότυπα που παρέχονται από το σύστημα.
Δεν θα εκτελεστεί στην πραγματικότητα εκτός αν το τροποποιήσετε και το ενεργοποιήσετε χειροκίνητα.
Η σημασία του μοιάζει περισσότερο με ένα "εγχειρίδιο λειτουργίας", που σας λέει πώς να γράψετε μια νέα διαμόρφωση πισίνας.
Γιατί να χωρίσουμε την πισίνα;
- 安全 性Χρησιμοποιήστε διαφορετικούς χρήστες για διαφορετικούς ιστότοπους για να αποφύγετε αντικρουόμενα δικαιώματα.
- 性能优化Ο αριθμός των διεργασιών μπορεί να προσαρμοστεί ξεχωριστά για κάθε ομάδα, επιτρέποντας ευέλικτες προσαρμογές με βάση τη ζήτηση κυκλοφορίας.
- ΑπομόνωσηΤα αρχεία καταγραφής, τα σφάλματα και οι διευθύνσεις ακρόασης είναι όλα ξεχωριστά, διευκολύνοντας την αντιμετώπιση προβλημάτων.
Για παράδειγμα: ακόμη και www.conf Κατέρρευσε.etufo.org.conf Θα συνεχίσει να λειτουργεί κανονικά και δεν θα διακόψει τη λειτουργία ολόκληρου του διακομιστή.
实际场景
- Διακομιστής μίας τοποθεσίαςΤο www.conf είναι αρκετό.
- Διακομιστής πολλαπλών τοποθεσιώνΚάθε ιστότοπος έχει το δικό του ανεξάρτητο αρχείο .conf, όπως το etufo.org.conf.
- dummy.confΜόνο για αναφορά, δεν συνιστάται.
Σύγκριση διαμόρφωσης
www.conf (προεπιλεγμένη ομάδα)
[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5
etufo.org.conf (Προσαρμοσμένη ομάδα)
[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log
Η κύρια διαφορά είναι:Ταυτότητα χρήστη, διεύθυνση ακρόασης, αριθμός διεργασιών.
1. Προσαρμόστε τις παραμέτρους της ομάδας διεργασιών PHP-FPM
Εάν η διαμόρφωση χρησιμοποιεί dynamicΑυτή είναι μια μέθοδος προεκκίνησης ορισμένων εργασιακών διεργασιών και δυναμικής προσαρμογής τους ανάλογα με τον όγκο αιτημάτων, η οποία μπορεί να ανταποκριθεί ταχύτερα όταν ο όγκος αιτημάτων αυξηθεί ξαφνικά.
Για ιστότοπους με ορισμένο ποσοστό επισκεψιμότητας, συνιστάται η χρήση pm = dynamicΕπειδή μπορεί να διατηρήσει έναν ορισμένο αριθμό αδρανών διεργασιών και να αποφύγει 500 σφάλματα κατά τη διάρκεια υψηλής ταυτόχρονης λειτουργίας.
Συνιστάται να το χρησιμοποιείτε μόνο όταν ο όγκος πρόσβασης είναι εξαιρετικά χαμηλός και οι πόροι μνήμης είναι περιορισμένοι. pm = ondemand Για εξοικονόμηση πόρων.
Προτείνεται να dynamicκαι βελτιστοποίηση pm.max_children Και άλλες παράμετροι:
pm = dynamic
pm.max_children = 16 ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4 ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2 ; 最小空闲进程数
pm.max_spare_servers = 7 ; 最大空闲进程数
pm.max_requests = 3000 ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s ; 空闲进程 10s 后自动退出
Γιατί θέλετε να το αλλάξετε έτσι;
pm = dynamic: Κατανομή των διαδικασιών πιο ευέλικτα για να αποφευχθεί η αναμονή αιτημάτων που μπορεί να προκληθεί από κατ' απαίτηση.pm.max_children = 16: Αποτρέψτε 500 σφάλματα που προκαλούνται από πολύ λίγες διεργασίες.pm.start_servers = 5: Αποφύγετε την αργή εκκίνηση της διαδικασίας.pm.max_requests = 3000:Πρόληψη διαρροών μνήμης, ανακυκλώνετε τη διαδικασία τακτικά.
2. Περιορίστε το χρόνο εκτέλεσης των σεναρίων PHP για να αποτρέψετε τη μακροχρόνια κατάληψη
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Αυτό μπορεί να αποτρέψει κάποιουςΤα σενάρια PHP που χρησιμοποιούν πάρα πολύ CPU μπορούν να καταστρέψουν τον διακομιστή σας.
Μετά την αποθήκευση, επανεκκινήστε τη διαδικασία PHP:
sudo systemctl restart php8.3-fpmΕνεργοποιήστε την παρακολούθηση κατάστασης PHP-FPM για να παρακολουθείτε την πρόοδο ανά πάσα στιγμή
Ενεργοποιήστε την παρακολούθηση της διαδικασίας PHP-FPM και δείτε την ανά πάσα στιγμήΤρέχων αριθμός ενεργών διεργασιών και κατάσταση αναμονής αιτήματος, για να αποφευχθεί η υπερφόρτωση του διακομιστή.
σε php-fpm.conf Προστέθηκε σε:
pm.status_path = /status
Στη συνέχεια, διαμόρφωση Nginx:
location /status {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
Με αυτόν τον τρόπο, μπορείτε http://yourdomain.com/status Δείτε το PHP-FPM σε δράση!
Βελτιστοποιήστε τα αρχεία καταγραφής PHP-FPM για γρήγορη αντιμετώπιση προβλημάτων
σε php-fpm.conf Προσθήκη σε:
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s ; 执行超过 5s 的脚本记录到日志
Με αυτόν τον τρόπο, κάθε φορά που εμφανίζεται ένα σφάλμα 500, μπορείτε να προβάλετε απευθείας το αρχείο καταγραφής:
tail -f /var/log/php-fpm/error.log
Δείτε εάν η PHP αναφέρει κάποιο σφάλμα, όπως π.χ out of memory,script execution timeout 等.
Επανεκκινήστε τακτικά το PHP-FPM για να αποτρέψετε διαρροές μνήμης
可以 通过 cron Επανεκκινήστε το PHP-FPM τακτικά για να αποτρέψετε την πρόκληση μακροχρόνιων διεργασιώνΔιαρροές μνήμης.
crontab -e
Προσθέστε την ακόλουθη προγραμματισμένη εργασία για αυτόματη επανεκκίνηση του PHP-FPM στις 3 π.μ. κάθε μέρα:
0 3 * * * /usr/sbin/service php8.3-fpm restart
Τι γίνεται αν το πρόβλημα επιμένει; Περαιτέρω βελτιστοποίηση!
Εάν εξακολουθείτε να ακολουθείτε την παραπάνω βελτιστοποίησηΠεριστασιακά συμβαίνουν 500 σφάλματα, μπορείτε να συνεχίσετε με τις ακόλουθες βελτιστοποιήσεις:
1. Ενεργοποιήστε την OPcache για να βελτιώσετε την αποτελεσματικότητα της εκτέλεσης της PHP
Εάν η OPcache δεν είναι ακόμη ενεργοποιημένη, μπορείτε να την εγκαταστήσετε ως εξής (χρησιμοποιώντας το Ubuntu ως παράδειγμα):
sudo apt install php8.3-opcache -y
Στη συνέχεια, επεξεργαστείτε php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
Αποτέλεσμα; Η ταχύτητα εκτέλεσης της σελίδας PHP έχει βελτιωθεί σημαντικά!
2. Βελτιστοποίηση διαμόρφωσης Nginx
Βεβαιωθείτε ότι οι παράμετροι που σχετίζονται με το Nginx είναι λογικές, όπως π.χ fastcgi_read_timeout Προσαρμόστε το κατάλληλα για να αποφύγετε τον τερματισμό των σεναρίων PHP από το Nginx λόγω μεγάλου χρόνου εκτέλεσης:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Περίληψη: Βελτιστοποιήστε το PHP-FPM και ο ιστότοπος δεν θα διακοπεί πλέον!
Ποιες προσαρμογές κάναμε μετά από αυτήν τη βελτιστοποίηση;
✅ Βελτιστοποίηση του χώρου συγκέντρωσης διεργασιών PHP-FPM,χρήση ondemandΚαι βελτιστοποίηση pm.max_children παράμετρος?
✅ Περιορισμός του χρόνου εκτέλεσης των σεναρίων PHP, για την πρόληψη της μακροχρόνιας κατάληψης της CPU.
✅ Ενεργοποίηση παρακολούθησης PHP-FPM, δείτε το φόρτο της διαδικασίας σε πραγματικό χρόνο.
✅ Βελτιστοποίηση αρχείων καταγραφής PHP-FPM, γρήγορη αντιμετώπιση προβλημάτων 500 σφαλμάτων.
✅ Επανεκκινήστε τακτικά το PHP-FPM, αποτρέψτε τις διαρροές μνήμης.
✅ Ενεργοποίηση OPcache, βελτίωση της αποτελεσματικότητας εκτέλεσης της PHP.
✅ Βελτιστοποίηση της διαμόρφωσης Nginx, για αποφυγή προβλημάτων χρονικού ορίου.
Μετά από αυτή τη βελτιστοποίηση, το φορτίο PHP-FPM θα μειωθεί σημαντικά και η λειτουργία του ιστότοπου θα είναι πιο σταθερή! 🔥
Πήγαινε να το δοκιμάσεις τώρα! 💪🚀
Ιστολόγιο Hope Chen Weiliang ( https://www.chenweiliang.com/ ) κοινοποίησε "Το φορτίο HestiaCP PHP-FPM είναι πολύ υψηλό; Σφάλμα δυναμικής ιστοσελίδας 500; Αυτή η βελτιστοποίηση θα τεθεί σε ισχύ αμέσως! ”, μπορεί να σας φανεί χρήσιμο.
Καλώς ήρθατε να μοιραστείτε τον σύνδεσμο αυτού του άρθρου:https://www.chenweiliang.com/cwl-32512.html
