Artikelverzeichnis
Die Anzahl der gleichzeitigen Benutzer, die ein Server bedienen kann, hängt nicht von der Anzahl seiner Kerne ab, sondern davon, wie viel Speicher jeder Prozess verbraucht.
Diese Aussage mag wie eine Provokation klingen, aber sie ist die realste und schmerzhafteste Erfahrung in der Betriebs- und Instandhaltungsbranche.
Warum ist der Arbeitsspeicher der entscheidende Engpass?
Viele Menschen sehen einen VPS mit 8-Kern-CPU und 24 GB Arbeitsspeicher und denken unbewusst, dass sie problemlos Hunderte von PHP-FPM-Prozessen ausführen können.
In der Realität beträgt die RSS-Speichernutzung eines einzelnen PHP-Prozesses jedoch oft bis zu 200 MB.
Dies ist das Ergebnis, das durch tatsächliche Tests über die Kommandozeile erzielt wurde:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
Im komplexen Framework und der Multi-Plugin-Umgebung von HestiaCP , insbesondere ohne OPcache-Optimierung, sind 200 MB die Norm.
Dies bedeutet, dass der Arbeitsspeicher und nicht die CPU die harte Grenze darstellt, die die maximale Parallelität bestimmt.

Empfohlene Konfigurationsdatei (php-fpm.conf)
pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s
Logik der Parameterberechnung und Einstellungsgrundlage
| Konfigurationsparameter | Einstellwert | Kernberechnung und Einrichtungsgrundlage |
|---|---|---|
| pm | dynamic | Der dynamische Modus ermöglicht das flexible Hinzufügen oder Entfernen von Prozessen je nach Bedarf an Parallelität und gleicht dabei Reaktionsgeschwindigkeit und Speichernutzung aus. |
| pm.max_children | 80 | 24 GB Gesamtspeicher abzüglich Systemkernel und MySQL/RedisNach Nginx bleiben noch etwa 16 GB für PHP übrig.16,384 MB / 200 MB ≈ 81.9Durch die Einstellung auf 80 kann ein OOM (Out of Memory) bei hoher Parallelität vollständig vermieden werden. |
| pm.start_servers | 16 | Die Vorheizzeit beim Start ist auf das Doppelte der Anzahl der CPU-Kerne eingestellt (8 Kerne × 2 = 16), um sicherzustellen, dass der Dienst nach dem Neustart sofort grundlegende Parallelität bewältigen kann. |
| pm.min_spare_servers | 8 | Um sicherzustellen, dass neue Anfragen auch in Zeiten geringer Auslastung jederzeit beantwortet werden können, sollte die Anzahl der CPU-Kerne auf 8 eingestellt werden. |
| pm.max_spare_servers | 24 | Um auch nach dem Nachlassen des Datenverkehrs eine moderate Anzahl von Prozessen aufrechtzuerhalten und so leichte Schwankungen zu bewältigen, sollte der Wert auf das Dreifache der Anzahl der CPU-Kerne (8 Kerne × 3 = 24) eingestellt werden. |
| pm.max_requests | 500 | Wenn ein einzelner Prozess eine große Basis von 200 MB erreicht, führt die Reduzierung der Anzahl der Anfragen auf 500 dazu, dass der Prozess zerstört und neu erstellt wird, wodurch implizite Speicherlecks schneller beseitigt werden können. |
| pm.process_idle_timeout | 10s | Übertreffen min_spare_servers Leerlaufprozesse werden nach 10 Sekunden ohne Anfragen automatisch freigegeben und dem Systemspeicher zurückgegeben. |
Wichtige unterstützende Einstellungen und Optimierungsvorschläge
1. Timeout-Anti-Kater-Mechanismus
request_terminate_timeout = 60s Das ist der Schlüssel.
Es kann Prozesse zwangsweise beenden, die aufgrund eines Datenbank-Deadlocks oder einer Blockierung durch Drittanbieter-APIs festhängen.
Unterdessen hat Nginx... fastcgi_read_timeout Es muss mindestens 60 Sekunden lang gespeichert werden, sonst empfängt der Client es vorzeitig. 504 Gateway Timeout.
2. Strategien zur Überwindung von Speicherengpässen
Eine maximale Anzahl von 80 gleichzeitigen Prozessen bedeutet, dass das System unter extremen Parallelitätsbedingungen maximal 80 dynamische HTTP-Anfragen gleichzeitig bearbeiten kann.
Wenn Sie die Kapazität weiter verbessern möchten, sollte der Schwerpunkt auf der Reduzierung des Speicherverbrauchs pro Prozess liegen.
- OPcache aktivieren: Ja
php.iniMittlere Konfigurationopcache.enable=1及opcache.memory_consumption=256Durch Bytecode-Caching kann der Speicherverbrauch eines einzelnen Prozesses von 200 MB auf 60–100 MB reduziert werden. - Angemessene Kontrolle des Speicherlimits:Wille
php.iniMittememory_limitBeschränkt auf128M或256MUm einzelne fehlerhafte Skripte zu verhindern无限Es benötigt viel Speicherplatz.
Sobald die Speichernutzung eines einzelnen Prozesses auf 100 MB sinkt...pm.max_children Es kann problemlos aufgerüstet werden auf 150 Darüber hinaus hat sich die Fähigkeit zur gleichzeitigen Verarbeitung nahezu verdoppelt.
Zitierte maßgebliche Standpunkte
Gemäß den Empfehlungen in der offiziellen Nginx-Dokumentation :
„FastCGI-Anwendungen sollten stets mit Timeout-Anweisungen überwacht werden, um Ressourcenerschöpfung zu verhindern.“
(Quelle: Nginx-Dokumentation)
Im offiziellen PHP-Handbuch steht eindeutig:
„pm.max_children definiert die maximale Anzahl der zu erstellenden Kindprozesse. Dies ist die wichtigste Direktive.“
(Quelle: PHP-FPM-Dokumentation)
Diese maßgeblichen Ansichten decken sich perfekt mit unseren Vorgehensweisen und beweisen, dass die Optimierungslogik nicht nur auf Erfahrung, sondern auch auf standardisierten Best Practices basiert.
Fazit: Meine Standpunkte und Schlüsselzitate
Bei Szenarien mit hoher Parallelität ist die CPU der Motor, der Speicher der Treibstofftank und PHP-FPM der Flottendisponent.
Ganz egal wie leistungsstark der Motor ist, wenn der Treibstofftank nicht groß genug ist, wird der Konvoi nicht sehr weit kommen.
Echte Experten reizen die Parameter nicht einfach blind bis zum Maximum aus, sondern berechnen präzise den Speicherverbrauch jedes Prozesses, um sowohl Verschwendung als auch Überlauf zu vermeiden.
Die Essenz der Optimierung besteht darin, mit begrenzten Ressourcen das optimale Gleichgewicht zu finden.
Dies ist nicht nur eine Technologie, sondern auch eine Philosophie.
Hören Sie also auf zu glauben, dass „die Anzahl der Kerne alles bestimmt“. Was die Grenze der gleichzeitigen Verarbeitung wirklich bestimmt, ist Ihre Kontrolle über den Speicher.
Ergreifen Sie die Initiative und optimieren Sie Ihren VPS, um sein volles Potenzial auszuschöpfen und jeden einzelnen Speicherplatz optimal zu nutzen.
Hoffentlich ist Ihnen der Artikel „8-Kern 24G VPS: Arbeitsspeicher erschöpft? Extreme Optimierung des PHP-FPM-Prozesspools unter HestiaCP“, der auf Chen Weiliangs Blog ( https://www.chenweiliang.com/ ) veröffentlicht wurde, hilfreich.
Sie können den Link zu diesem Artikel gerne teilen: https://www.chenweiliang.com/cwl-34509.html
