Kürzlich habe ich festgestellt, dass der Speicher meines Blogs immer wieder „aufgefressen“ wurde. Nachdem ich mich im Backend angemeldet hatte, kam es zunächst zu Verzögerungen. Ich hatte zunächst den Verdacht, dass dies an unzureichendem Swap lag Ich habe ein paar Gigabyte Swap auf den VPS-Host übertragen und beobachtet. Nach einer Weile stellte ich fest, dass der Swap, egal wie groß er war, langsam „aufgefressen“ wurde!

Es ist offensichtlich, dass einige PHP-Dienste den Speicher des VPS belegt haben und ihn nicht freigegeben haben, was dazu führt, dass Swap aufgerufen wird, nachdem der physische Speicher erschöpft ist. Offensichtlich läuft Swap nicht so effizient wie der physische Speicher, daher wird der Prozess gesteckt. Angesichts der Tatsache, dass die WordPress-Website derzeit zu viele Themes und Plug-Ins verwendet, ist es normal, dass diese Situation auftritt.

In der LNMP-Architektur läuft PHP im FastCGI-Modus. Laut offizieller Aussage recycelt php-cgi am Ende jeder Anfrage den gesamten vom Skript verwendeten Speicher, gibt ihn jedoch nicht an das Betriebssystem frei, sondern fährt fort um es zu halten. Auf die nächste PHP-Anfrage antworten. Und php-fpm ist der FastCGI-Prozessmanager, der zur Steuerung des Speichers und der Prozesse von PHP verwendet wird.

Der Linux-PHP-FPM-Optimierungsprozess benötigt viel Speicher und gibt keinen Speicher frei

Daher besteht die Lösung darin, die Gesamtzahl der Prozesse und den von einem einzelnen Prozess belegten Speicher über PHP-FPM zu optimieren und so das Problem zu lösen, dass der PHP-FPM-Prozess großen Speicher belegt und keinen Speicher freigibt. Weitere Linux-Serveroptimierungsmethoden und Website-Erstellungserfahrung sowie:

  1. Tutorial zur grundlegenden Syntax und Bedienung von Linux Crontab-Befehlen für geplante Aufgaben – VPS/Server-Automatisierung
  2. Alibaba Cloud Japan VPS-Host-Geschwindigkeits-Leistungsbewertung – Japan SoftBank Hong Kong NTT Line
  3. Durch die Auflösung von DNS-Domänennamen kann DNSSEC DNS-Hijacking verhindern – Google Cloud DNS-Einstellungen DNSSEC

PS: Aktualisiert am 14. Dezember 2018, Wenn der Speicher und die Leistung Ihres VPS-Hosts nicht sehr gut sind, ist es am besten, das Caching zu diesem Zeitpunkt zu aktivieren, um den Ressourcenverbrauch erheblich zu senken: WordPress ermöglicht die Cache-Beschleunigung von Nginx fastcgi_cache method -Nginx-Konfigurationsbeispiel.

PS: Aktualisiert am 29. September 2019, Aufgrund des von Google entwickelten Serveroptimierungsartefakts ngx_pagespeed ist ein vollständiger Satz von Optimierungstools wie verzögertes Laden von Bildern, adaptives WebP, JS- und CSS-Optimierung sowie Bildintegration integriert Optimierung: PageSpeed ​​Server-Optimierungsartefakt – Nginx stellt das ngx_pagespeed-Modul bereit und erlebt beschleunigte Effekte.

1. Analysieren und bestimmen Sie die Speichernutzung von PHP-FPM

Wenn Sie feststellen, dass der VPS-Host hängen bleibt, überprüfen Sie zunächst die Speichernutzung. Häufig verwendete Befehle sind Top, Glances, Free usw. Freunde, die diese Befehle nicht kennen, können sich zunächst mit dem Thema befassen, ob die Mining-Station dies tut: Linux-System Zusammenfassung der Überwachungsbefehle – Master-CPU, Speicher, Festplatten-E/A usw., um Leistungsengpässe zu finden.

Verwenden Sie den Befehl „Glances“ und drücken Sie m, um die Speichernutzung des aktuellen VPS-Hostprozesses anzuzeigen. Sortieren Sie sie vom am meisten bis zum am wenigsten belegten Speicher (oder verwenden Sie den Befehl „Top“ und drücken Sie M, der Effekt ist der gleiche). Wie unten gezeigt (zum Vergrößern anklicken):

3.2  Reduzieren Sie die Anzahl der PHP-FPM-Prozesse

Wenn der Speicher Ihres VPS-Hosts belegt und erschöpft ist, können Sie die Anzahl Ihrer PHP-FPM-Prozesse anhand der Anzahl der PHP-FPM-Prozesse berechnen 1 GB Arbeitsspeicher beträgt 10 – zwischen 20 und 20, abhängig von den von Ihrem PHP geladenen Add-Ons.

3.3  PHP-FPM-Konfigurationsbeispiel

Hier wird als Demonstration eine VPS-Konfiguration von php-fpm mit 1 GB Speicher verwendet. Im tatsächlichen Betrieb muss der Einstellungswert anhand der Leistung des Servers selbst, von PHP usw. berücksichtigt werden.

pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。

4. Lösen Sie das Problem, dass der PHP-FPM-Prozess keinen Speicher freigibt

Das obige Problem der Reduzierung der Speichernutzung von PHP-FPM wird durch die Reduzierung der Gesamtzahl der PHP-FPM-Prozesse gelöst. Während der tatsächlichen Verwendung stellt sich heraus, dass der PHP-FPM-Prozess immer noch das Problem hat, dass er lange Zeit ohne Speicher belegt es freigeben. Die Lösung besteht darin, die Anzahl der pm.max_requests zu reduzieren.

Die maximale Anzahl von Anforderungen, max_requests, bedeutet, dass der Prozess automatisch neu gestartet wird, wenn die Anzahl der von einem PHP-CGI-Prozess verarbeiteten Anforderungen max_requests erreicht, wodurch der Zweck der Speicherfreigabe erreicht wird. Nehmen Sie als Beispiel die VPS-Hosteinstellungen mit 1 GB Speicher (wenn der von Ihnen eingestellte Wert nicht das Niveau der Speicherfreigabe erreicht, können Sie ihn weiter senken):

pm.max_requests = 500 

Wenn der PHP-FPM-Prozess den durch pm.max_requests festgelegten Wert erreicht, wird der Prozess neu gestartet, um Speicher freizugeben. Das Bild unten ist das Ergebnis nach meinem Test. Es ist zu erkennen, dass der PHP-FPM-Prozess zwangsweise beendet und der Speicher freigegeben wurde.

5. Zusammenfassung

Für große Speicher- und Parallelitäts- und Verfügbarkeitsanforderungen wird empfohlen, den statischen Verwaltungsmodus + den größten pm.max_children zu verwenden. Wenn es sich um einen Server mit kleinem Speicher handelt, wird empfohlen, den dynamischen oder On-Demand-Modus zu verwenden und die Anzahl der Prozesse pm.start_servers und pm.max_spare_servers zu reduzieren.

Warum habe ich die Parameter nicht angepasst, um den gewünschten Effekt zu erzielen? Nach den Erfahrungen von wzfou.com können die Parameter der PHP-FPM-Konfigurationsdatei nicht verallgemeinert werden. Sie müssen basierend auf der Leistung des Servers, dem dynamischen Inhalt des WEB und den Verfügbarkeitsanforderungen angepasst werden Überprüfen Sie am besten, ob ein Speicherverlust vorliegt.

Aktualisiert am 9. Oktober 2019, Wenn Ihre PHP-FPM-Parameter zu klein eingestellt sind, kann ein 502-Fehler auftreten. Lösung: Beheben Sie den 502-Fehler im WordPress-Hintergrundbearbeitungs-Speichermenü.

Hinterlasse eine Antwort