HestiaCP PHP-FPM ist stark ausgelastet? Dynamische Webseite 500-Fehler? Diese Optimierung tritt sofort in Kraft!

Kennen Sie das? Ihre Website wird plötzlich langsamer oder wirft sogar einen 500-Fehler. Ein Neustart von PHP-FPM behebt das Problem zwar , aber es tritt nach kurzer Zeit wieder auf. Das ist unglaublich frustrierend!

Warum passiert das? Tatsächlich liegt die Ursache meist in einer fehlerhaften Konfiguration des PHP-FPM-Prozesspools oder in unzureichenden Serverressourcen . Heute optimieren wir PHP-FPM unter HestiaCP gründlich, um die Stabilität Ihrer Website zu gewährleisten!

Der Hauptgrund, warum PHP-FPM überlastet ist

PHP-FPM ist der Prozessmanager für PHP und zuständig für die Verarbeitung dynamischer Anfragen. Eine fehlerhafte Konfiguration kann zu folgenden Problemen führen:

  • Serverressourcen sind erschöpft, wodurch PHP-FPM nicht in der Lage ist, rechtzeitig auf neue Anfragen zu reagieren;
  • Zu wenige Prozesse, wenn der Verkehr plötzlich zunimmt, kann er nicht rechtzeitig bearbeitet werden;
  • Die Prozessauslastung ist zu hoch, wodurch die CPU-Last explodiert.

HestiaCP PHP-FPM ist stark ausgelastet? Dynamische Webseite 500-Fehler? Diese Optimierung tritt sofort in Kraft!

Wie kann man feststellen, ob PHP-FPM überlastet ist?

Kann benutzen tophtop Befehl zum Anzeigen der CPU- und Speichernutzung:

top -c

Wenn Sie Prozessinformationen ähnlich den folgenden sehen, bedeutet dies, dass PHP-FPM unter hoher Last läuft:

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

Beanspruchen diese Prozesse mehr als 70 % der CPU? Falls dies häufig vorkommt, stimmt definitiv etwas mit Ihrem PHP-FPM nicht!

Wie können wir also die PHP-FPM-Konfiguration optimieren, damit der Server nicht mehr überlastet wird?

PHP-FPM Prozesspool-Optimierung (Kernparameter-Anpassung)

Öffnen Sie zunächst php-fpm 配置文件:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Wechseln Sie zu Ihrer PHP-Version, beispielsweise PHP8.5, 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.5 

Dies deutet darauf hin, dass die Website PHP 8.5 verwendet.

Werfen wir einen Blick auf Ihre PHP-FPM-Konfiguration:

[chenweiliang.com]
listen = /run/php/php8.5-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

Sie können sehen, dass Ihre pm Das verwendete ist ondemand,Zwar kann dadurch die Ressourcennutzung während Leerlaufzeiten reduziert werden, aber wenn der Datenverkehr plötzlich zunimmt, kann der Prozess möglicherweise nicht rechtzeitig reagieren., was zu einem 500-Fehler führt.

www.conf: Der im System integrierte „universelle Ressourcenpool“

Nach der Installation von PHP-FPM stellt Ihnen das System automatisch eine... zur Verfügung. www.conf 文件 文件
es istPositionierungEs ist ganz einfach – es handelt sich lediglich um einen Standardprozesspool, der sofort einsatzbereit ist und üblicherweise an ... angehängt ist. www-Daten Benutzer-Download.

Dieser Pooltyp eignet sich besonders für Umgebungen mit einem einzigen Standort: Die Konfiguration ist ressourcenschonend, und die Parameter sind allesamt generische Vorlagen, wie zum Beispiel:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

Wenn Sie nur eine Website hosten, können Sie diese direkt und zuverlässig ohne zusätzlichen Aufwand nutzen.

etUFO.org.conf: Benutzerdefinierter Pool

Wenn man mehrere Websites betreibt, kann man nicht mehr alle in denselben Pool quetschen.
An diesem Punkt erstellt HestiaCP automatisch für jede Website einen separaten Pool, zum Beispiel... etUFO.org.confSpezialisiert auf Domainnamen etufo.org 服务 服务

Die übliche Spielweise ist:

  • Benutzer und Gruppen ändern:user = etufo,group = etufo
  • Unabhängige Überwachung:listen = /run/php/etufo.sock
  • Durch die Anpassung der Prozessanzahl wird auch bei hoher Parallelität absolute Stabilität gewährleistet.
  • Separate Protokolldateien erleichtern die Fehlersuche.

Die Vorteile liegen auf der Hand: sichere Isolation . Selbst wenn ein Standort kompromittiert wird, bleiben die anderen unbeeinträchtigt.

dummy.conf: Dummy-Datei

dummy.conf Dies sind in der Regel Beispiele oder Vorlagen, die vom System bereitgestellt werden.
Es wird erst dann funktionieren, wenn Sie es manuell modifizieren und aktivieren.
Seine Bedeutung gleicht eher einer „Bedienungsanleitung“, die Ihnen erklärt, wie Sie eine neue Poolkonfiguration erstellen.

Warum den Pool teilen?

  • 安全 性Um Konflikte bei den Berechtigungen zu vermeiden, sollten für verschiedene Websites unterschiedliche Benutzer verwendet werden.
  • 性能优化Die Anzahl der Prozesse kann für jeden Pool individuell angepasst werden, was flexible Anpassungen je nach Verkehrsaufkommen ermöglicht.
  • IsolierungProtokolle, Fehler und Listening-Adressen sind alle getrennt, was die Fehlersuche erleichtert.

Wenn beispielsweise www.conf abstürzt, läuft etufo.org.conf weiterhin normal und bringt den gesamten Server nicht zum Absturz.

实际场景

  • Einzelstandortserverwww.conf genügt.
  • Multisite-ServerJede Website hat ihre eigene unabhängige .conf-Datei, zum Beispiel etufo.org.conf.
  • dummy.confNur zur Information, nicht empfehlenswert.

Konfigurationsvergleich

www.conf (Standardpool)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (Benutzerdefinierter Pool)

[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

Die Hauptunterschiede sind: Benutzeridentität, Empfangsadresse und Anzahl der Prozesse.

1. Passen Sie die Parameter des PHP-FPM-Prozesspools an

Wenn die Konfiguration dynamicHierbei handelt es sich um eine Methode, bei der einige Arbeitsprozesse vorab gestartet und dynamisch an das Anforderungsvolumen angepasst werden. Dadurch kann schneller reagiert werden, wenn das Anforderungsvolumen plötzlich zunimmt.

Für Websites mit einem bestimmten Verkehrsaufkommen empfiehlt sich die Verwendung pm = dynamicWeil es eine bestimmte Anzahl inaktiver Prozesse aufrechterhalten und 500 Fehler bei hoher Parallelität vermeiden kann.

Es wird empfohlen, es nur zu verwenden, wenn das Zugriffsvolumen extrem niedrig und die Speicherressourcen knapp sind. pm = ondemand Um Ressourcen zu sparen.

Empfohlene Änderung zu dynamicund optimieren pm.max_children Und andere 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 后自动退出

Warum willst du es so ändern?

  • pm = dynamic: Ordnen Sie Prozesse flexibler zu, um Wartezeiten bei Anforderungen zu vermeiden, die durch On-Demand verursacht werden können.
  • pm.max_children = 16: Verhindern Sie 500-Fehler, die durch zu wenige Prozesse verursacht werden.
  • pm.start_servers = 5: Vermeiden Sie langsame Prozessstarts;
  • pm.max_requests = 3000:Verhindern von Speicherlecks, wiederholen Sie den Vorgang regelmäßig.

2. Begrenzen Sie die Ausführungszeit von PHP-Skripten, um eine langfristige Belegung zu verhindern

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

Dies verhindert, dass bestimmte PHP-Skripte, die übermäßig viel CPU-Leistung verbrauchen, den Server zum Absturz bringen.

Nach dem Speichern starten Sie den PHP-Prozess neu:

sudo systemctl restart php8.3-fpm

PHP-FPM basierend auf der VPS-Konfiguration optimieren

Beispiel für eine VPS-Konfiguration:

  • Beschreibung: VPS 3 NVMe
  • Speicherplatz: 300 GB
  • CPU-Kerne: 8
  • RAM: 24 GB

Basierend auf Ihrer VPS-Konfiguration ( 8 CPU-Kerne, 24 GB RAM ) sind Ihre Serverressourcen mehr als ausreichend. Für PHP-FPM ermöglichen 24 GB RAM die Konfiguration einer sehr hohen Anzahl gleichzeitiger Prozesse.

In einer Produktionsumgebung reservieren wir typischerweise genügend Arbeitsspeicher (sagen wir 8-12 GB) für das System selbst, Apache-Datenbanken (wie MySQL / MariaDB) und Caches (wie Redis / Memcached ), sodass die verbleibenden 12-16 GB Arbeitsspeicher vollständig für PHP-FPM reserviert bleiben.

Ausgehend von einer durchschnittlichen Speichernutzung von 40-60 MB pro PHP-Prozess können mit 1 GB Arbeitsspeicher ungefähr 16-25 Prozesse ausgeführt werden.

Nachfolgend finden Sie eine auf Sie zugeschnittene , hochleistungsfähige FPM-Konfiguration mit hoher Parallelität , die die Kapazität von WordPress erheblich verbessern und Abstürze aufgrund plötzlicher Traffic-Spitzen verhindern kann:

pm = dynamic

; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300)
; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出
pm.max_children = 300

; 启动时创建的初始进程数(CPU核心数 * 4)
pm.start_servers = 32

; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应)
pm.min_spare_servers = 16

; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放)
pm.max_spare_servers = 64

; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露
pm.max_requests = 1000

; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死
request_terminate_timeout = 60s

; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈)
slowlog = /var/log/php8.5-fpm.log.slow
request_slowlog_timeout = 5s

💡 Warum diese Konfiguration?

  1. pm.max_children = 300Dies ist eine grundlegende Optimierung. Ihre bisherige Konfiguration von 50 Prozessen war für 24 GB Arbeitsspeicher zu konservativ. Bei plötzlichen Lastspitzen (oder wenn Bots den Hintergrund überlasteten) wären 50 Prozesse sofort überfordert gewesen, was zu Verbindungsabbrüchen geführt hätte. Eine Erhöhung auf 300 Prozesse kann die Verarbeitungskapazität Ihres Servers um ein Vielfaches steigern.
  2. pm.start_servers / `min_spare_serversDa Sie über 8 CPU-Kerne verfügen, können Sie anfänglich und normalerweise mehr Leerlaufprozesse beibehalten, wodurch Sie den Vorteil der Mehrkernarchitektur nutzen können, sodass neue Anfragen sofort geöffnet werden können, ohne auf die Prozesserstellung warten zu müssen.
  3. pm.max_requests = 1000Erhöhen Sie den Wert von 500 auf 1000. Ihr Arbeitsspeicher ist groß genug, und Prozesse müssen nicht häufig neu gestartet werden. Durch die Erhöhung auf 1000 kann die CPU-Auslastung durch häufiges Beenden und Erstellen von Prozessen reduziert werden.

Langsames Protokoll anzeigen:

tail -f /var/log/php8.5-fpm.log.slow
tail -f /var/log/php8.4-fpm.log.slow

Nach der Durchführung der Änderungen denken Sie bitte daran, den PHP-FPM-Dienst neu zu starten, damit die Änderungen wirksam werden.

systemctl restart php8.5-fpm

Aktivieren Sie die PHP-FPM-Statusüberwachung, um den Fortschritt jederzeit im Auge zu behalten

Durch die Aktivierung der PHP-FPM-Prozessüberwachung können Sie jederzeit die Anzahl der aktiven Prozesse und den Status der wartenden Anfragen einsehen und so eine Serverüberlastung verhindern.

php-fpm.conf Hinzugefügt in:

pm.status_path = /status

Dann die Nginx-Konfiguration:

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;
}

Auf diese Weise können Sie http://yourdomain.com/status Sehen Sie sich PHP-FPM in Aktion an!

Optimieren Sie PHP-FPM-Protokolle, um Probleme schnell zu beheben

php-fpm.conf Eigenschaften:

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 的脚本记录到日志

Auf diese Weise können Sie bei jedem 500-Fehler direkt das Protokoll anzeigen:

tail -f /var/log/php-fpm/error.log

Überprüfen Sie, ob PHP einen Fehler meldet, wie zum Beispiel out of memory,script execution timeout 等.

Starten Sie PHP-FPM regelmäßig neu, um Speicherlecks zu vermeiden

passieren können cron Starten Sie PHP-FPM regelmäßig neu, um zu verhindern, dass lang andauernde ProzesseSpeicherlecks.

crontab -e

Fügen Sie die folgende geplante Aufgabe hinzu, um PHP-FPM jeden Tag um 3 Uhr morgens automatisch neu zu starten:

0 3 * * * /usr/sbin/service php8.5-fpm restart

Was ist, wenn das Problem weiterhin besteht? Weitere Optimierung!

Sollten Sie nach Durchführung der oben genannten Optimierungen gelegentlich immer noch auf einen 500-Fehler stoßen , können Sie mit den folgenden Optimierungen fortfahren:

1. Aktivieren Sie OPcache, um die Effizienz der PHP-Ausführung zu verbessern

Wenn OPcache noch nicht aktiviert ist, können Sie es wie folgt installieren (am Beispiel von Ubuntu):

sudo apt install php8.5-opcache -y

Dann bearbeiten php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • Echtzeiterkennung deaktivierenReduzierung der Dateisystem-E/A und Verbesserung der Leistung.
  • Dies bedeutet jedoch, dass Sie nach der Änderung von PHP-Dateien den Cache manuell leeren (den PHP-Dienst neu starten) müssen.

Nach der Änderung der Konfiguration müssen Sie den PHP-Dienst neu starten, damit die Änderungen wirksam werden.

sudo systemctl restart php<版本>-fpm

Wirkung? Die Ausführungsgeschwindigkeit von PHP-Seiten wurde erheblich verbessert!

2. Optimierung der Nginx-Konfiguration

Stellen Sie sicher, dass die mit Nginx verbundenen Parameter sinnvoll sind, wie z. B. fastcgi_read_timeout Passen Sie es entsprechend an, um zu vermeiden, dass PHP-Skripte aufgrund langer Ausführungszeit von Nginx beendet werden:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Zusammenfassung: Optimieren Sie PHP-FPM und die Website stürzt nicht mehr ab!

Welche Anpassungen haben wir nach dieser Optimierung vorgenommen?

✅ Optimierung des PHP-FPM-Prozesspools,benutzen ondemandUnd optimieren pm.max_children Parameter;
Begrenzung der Ausführungszeit von PHP-Skripten, um eine langfristige CPU-Belastung zu verhindern;
Aktivieren Sie die PHP-FPM-Überwachung, zeigen Sie die Prozesslast in Echtzeit an;
Optimieren von PHP-FPM-Protokollen, beheben Sie schnell 500 Fehler;
Starten Sie PHP-FPM regelmäßig neu, Speicherlecks verhindern;
OPcache aktivieren, verbessern Sie die Effizienz der PHP-Ausführung;
Optimieren der Nginx-Konfiguration, um Timeout-Probleme zu vermeiden.

Nach dieser Optimierung wird die PHP-FPM-Last erheblich reduziert und der Website-Betrieb wird stabiler! 🔥

Probieren Sie es jetzt aus! 💪🚀

Wenn Sie noch mehr über die Anpassung von PHP-FPM-Vorlagen mit HestiaCP erfahren möchten, bietet Ihnen dieser Artikel ein tieferes Verständnis:

👉 HestiaCP Custom PHP-FPM Template: Geheimnisse der PHP 8.5-Leistungsoptimierung ▼

In diesem Inhalt finden Sie Folgendes:

  • Techniken zur Optimierung hochkonkurrenter Prozesse: Wie lässt sich die Reaktionsgeschwindigkeit durch eine sinnvolle Prozesskonfiguration verbessern?
  • Sicherheitsisolationslösung: Vermeiden Sie standortübergreifende Zugriffsrisiken und gewährleisten Sie die Stabilität des Kontos.
  • Protokollierung und Überwachung: Nutzen Sie langsame Protokolle, um Engpässe zu lokalisieren und die Website-Performance kontinuierlich zu optimieren.

发表 评论

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

Nach oben scrollen