Artikelverzeichnis
CPU-Spitzen auf dem HestiaCP -Server? Ein umfassender Leitfaden zur PHP-FPM-Prozessoptimierung!

Läuft die CPU Ihres Servers ständig auf 100 %? Drehen die Lüfter auf Hochtouren? Lädt Ihre Website langsam? Die Ursache könnte php-fpm sein!
Ich habe vor kurzem entdeckt chenweiliang.com Dieser PHP-Pool php-fpm Der Prozess hat die CPU wie verrückt ausgelastet und der Server ist abgestürzt!
Um den Server wiederzubeleben, habe ich eine Reihe von Optimierungsmethoden ausprobiert und es ist mir schließlich gelungen, die CPU-Auslastung zu reduzieren.
Jetzt teilen wir diesen effizienten Optimierungsleitfaden ! 🚀
1. Begrenzen Sie die Anzahl der PHP-FPM-Prozesse
Die Standardeinstellungen von php-fpm können eine unbegrenzte Anzahl von Prozessen erzeugen und so eine Überlastung der Server-CPU verursachen.
Zur Optimierung können wir die Prozessmanagementparameter ändern.
打开 php-fpm 配置文件:
sudo nano /etc/php/*/fpm/pool.d/www.conf
- *Wechseln Sie zu Ihrer PHP-Version, beispielsweise PHP8.3, und ändern Sie sie wie folgt:
/etc/php/8.3/fpm/pool.d/www.conf
Abfrage der von HestiaCP festgelegten PHP-Version
v-list-web-domain user domain.com
Zum Beispiel:
v-list-web-domain abc chenweiliang.com
In der Ausgabe sehen Sie etwa:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Dies deutet darauf hin, dass die Website PHP 8.3 verwendet.
Suchen und ändern Sie die folgenden Parameter:
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 后自动退出
Dann neu starten php-fpm Damit es wirksam ist:
sudo systemctl restart php-fpm
✅Effekt : Begrenzt die Anzahl der Prozesse, um zu verhindern, dass php-fpm übermäßig viele CPU-Ressourcen verbraucht.
2. OPCache aktivieren (zur Verbesserung der PHP-Leistung)
PHP analysiert den Code bei jeder Ausführung erneut, was eine Verschwendung von Ressourcen darstellt.
Die Lösung? Aktivieren Sie OPCache und cachen Sie Ihren PHP-Code!
编辑 php.ini dokumentieren:
sudo nano /etc/php/*/fpm/php.ini
Fügen Sie Folgendes hinzu oder ändern Sie es:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0 # 禁用实时检测,提高性能
Nach dem Speichern starten Sie den PHP-Prozess neu:
sudo systemctl restart php8.3-fpm
✅Effekt : Reduziert das wiederholte Parsen von PHP-Code, verringert die CPU-Last und verbessert die Ausführungseffizienz.
3. Begrenzen Sie die maximale Ausführungszeit von PHP-Skripten
Wenn ein PHP-Skript zu lange läuft, werden die CPU-Ressourcen kontinuierlich belegt.
Durch das Setzen einer angemessenen Timeout-Zeit kann verhindert werden, dass „störrische“ Prozesse den Server längere Zeit beanspruchen.
打开 php.ini dokumentieren:
sudo nano /etc/php/*/fpm/php.ini
Ändern Sie die folgenden Parameter:
max_execution_time = 30 # PHP 脚本最多执行 30 秒
max_input_time = 30 # 处理输入数据最多 30 秒
memory_limit = 256M # 限制单个 PHP 进程的内存占用
Starten Sie dann den PHP-Prozess neu:
sudo systemctl restart php-fpm
✅Effekt : Verhindert, dass PHP-Prozesse über längere Zeiträume laufen, wodurch die Verschwendung von CPU-Ressourcen reduziert wird.
4. Überprüfen MySQL Langsame Abfrage
PHP-FPM hat eine hohe Belastung,Die Ursache kann in der langsamen SQL-Abfrage liegen!
开启 MySQL Langsames Abfrageprotokoll, finden Sie die SQL-Anweisungen, die zurückhalten.
Bearbeiten Sie die MySQL-Konfigurationsdatei:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Eigenschaften:
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1 # 超过 1 秒的查询会被记录
Nach dem Speichern MySQL neu starten:
sudo systemctl restart mysql
Dann verwenden Sie mysqldumpslow Analysieren Sie langsame Abfragen:
mysqldumpslow -s c -t 10 /var/log/mysql-slow.log
✅Ergebnis : Zeitaufwändige SQL-Abfragen identifizieren, die Datenbankleistung optimieren und indirekt die PHP-Last reduzieren.
5. Einschränkungen Memcached Ressourcennutzung
Beim Betrachten der Prozessliste fand ich Die CPU-Auslastung des Memcached-Prozesses beträgt 24.8 %!
Möglicherweise ist die Cache-Zuweisung zu groß, sodass die CPU eine große Datenmenge verarbeiten muss.
调整 memcached 配置:
sudo nano /etc/memcached.conf
Antwort:
-m 32 # 限制 Memcached 内存使用 32MB
Dann Neustart:
sudo systemctl restart memcached
✅Effekt : Reduziert die CPU-Last des Memcached-Prozesses und verbessert die Caching-Effizienz.
6. Aktivieren Sie Nginx, um statische Ressourcen zwischenzuspeichern
Häufig verarbeitet PHP Anfragen mit einer großen Anzahl von CSS, JS, Bilder, aber diese Dateien benötigen überhaupt keine PHP-Analyse!
Die Lösung? Verwenden Sie Nginx, um statische Ressourcen zwischenzuspeichern!
Nginx-Konfiguration bearbeiten:
sudo nano /etc/nginx/nginx.conf
Eigenschaften:
location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {
expires max;
log_not_found off;
}
Nach dem Speichern starten Sie Nginx neu:
sudo systemctl restart nginx
✅Effekt : Reduziert die Anzahl der Verarbeitungsvorgänge statischer Dateien durch PHP und senkt somit die CPU-Auslastung.
7. Finden Sie das PHP-Skript, das die meiste CPU verwendet
Wenn die CPU-Auslastung nach der Optimierung immer noch zu hoch ist, kann es sein, dass einige PHP-Skripte wild laufen.
Verwenden Sie den folgenden Befehl, um den PHP-Prozess mit der höchsten CPU-Auslastung herauszufinden:
ps -eo pid,user,pcpu,pmem,args --sort=-pcpu | grep php
Wenn Sie feststellen, dass ein PHP-Skript zu viel CPU beansprucht, können Sie es direkt beenden:
kill -9 PID
✅Ergebnis : Identifiziert präzise „schlechte Äpfel“ und verhindert, dass PHP-Prozesse die CPU über längere Zeiträume belegen.
Zusammenfassung: 7 Möglichkeiten zur Optimierung von PHP-FPM
✅ Begrenzen Sie die Anzahl der PHP-FPM-Prozesse, um eine CPU-Überlastung zu verhindern
✅ OPCache aktivieren, reduzieren Sie das wiederholte Parsen von PHP-Code
✅ PHP-Timeout festlegen, um einen langfristigen Betrieb zu verhindern
✅ Überprüfen langsamer MySQL-Abfragen, Optimieren Sie die Leistung von Datenbankabfragen
✅ Memcached-Speicher anpassen, wodurch die CPU-Belastung reduziert wird
✅ Statischen Nginx-Cache aktivieren, wodurch der PHP-Parsing-Aufwand reduziert wird
✅ Suchen Sie nach PHP-Skripten mit hoher CPU-Auslastung, präzise Optimierung
Fazit
Serveroptimierung ist wie Fitness, Sie müssen präzise Anpassungen vornehmen und dürfen nicht herumalbern!
Nach einer Reihe von Optimierungen sank die CPU-Auslastung meines Servers von 80 % bis 15 %, die Website öffnet sich doppelt so schnell!
Wenn Ihr Server ähnliche Probleme hat, versuchen Sie diese Methoden! 💪
👉Jetzt handeln! Optimieren Sie Ihr PHP-FPM und retten Sie Ihren Server! 🚀
Hoffentlich ist Ihnen der Artikel „HestiaCP php-fpm process consumes a lot of CPU resources, how to optimize it?“ auf Chen Weiliangs Blog ( https://www.chenweiliang.com/ ) hilfreich.
Sie können den Link zu diesem Artikel gerne teilen: https://www.chenweiliang.com/cwl-32490.html
