Informationen dazu, wie Sie einen Engpass auf einem Server erkennen, diesen schnell beheben, die Leistung des Servers verbessern und eine erneute Überlastung verhindern.
Übersicht
In diesem Leitfaden erfahren Sie, wie Sie einen überlasteten Server in vier Schritten reparieren:
- Bewerten: Den Engpass des Servers ermitteln.
- Stabilisieren: Implementieren Sie schnelle Lösungen, um die Auswirkungen zu minimieren.
- Verbessern: Serverfunktionen erweitern und optimieren.
- Überwachen: Verwenden Sie automatisierte Tools, um zukünftige Probleme zu vermeiden.
Bewerten
Wenn ein Server durch Traffic überlastet ist, kann eine oder mehrere der folgenden Komponenten zu einem Engpass werden: CPU, Netzwerk, Arbeitsspeicher oder Laufwerk-E/A. Wenn Sie herausfinden, welcher dieser Faktoren den Engpass verursacht, können Sie sich auf die wirksamsten Maßnahmen konzentrieren.
- CPU: Eine CPU-Auslastung, die durchgehend über 80 % liegt, sollte untersucht und behoben werden. Die Serverleistung nimmt oft ab, wenn die CPU-Auslastung etwa 80–90 % erreicht, und wird deutlicher, je näher die Auslastung an 100 % herankommt. Die CPU-Auslastung für die Verarbeitung einer einzelnen Anfrage ist vernachlässigbar, aber bei Traffic-Spitzen kann dies einen Server manchmal überlasten. Wenn Sie die Bereitstellung auf eine andere Infrastruktur auslagern, teure Vorgänge reduzieren und die Anzahl der Anfragen begrenzen, wird die CPU-Auslastung reduziert.
- Netzwerk: In Zeiten mit hohem Traffic kann der Netzwerkdurchsatz, der zum Erfüllen von Nutzeranfragen erforderlich ist, die Kapazität überschreiten. Auf einigen Websites können je nach Hostanbieter auch Obergrenzen für die kumulative Datenübertragung gelten. Wenn Sie die Größe und Menge der Daten reduzieren, die an den Server und von ihm übertragen werden, wird dieser Engpass beseitigt.
- Arbeitsspeicher: Wenn ein System nicht genügend Arbeitsspeicher hat, müssen Daten auf die Festplatte ausgelagert werden. Der Zugriff auf das Laufwerk ist erheblich langsamer als der Zugriff auf den Arbeitsspeicher, was eine gesamte Anwendung verlangsamen kann. Wenn der Arbeitsspeicher vollständig aufgebraucht ist, kann es zu OOM-Fehlern (Out of Memory) kommen. Durch Anpassen der Arbeitsspeicherzuweisung, Beheben von Speicherlecks und Erweitern des Arbeitsspeichers kann dieser Engpass beseitigt werden.
- Laufwerk-E/A: Die Rate, mit der Daten von einem Laufwerk gelesen oder auf ein Laufwerk geschrieben werden können, wird durch das Laufwerk selbst eingeschränkt. Wenn die Laufwerks-E/A ein Engpass ist, kann das Problem durch Erhöhen der im Arbeitsspeicher zwischengespeicherten Datenmenge behoben werden (auf Kosten einer höheren Arbeitsspeicherauslastung). Wenn das nicht funktioniert, müssen Sie möglicherweise ein Upgrade Ihrer Laufwerke durchführen.
Die Techniken in diesem Leitfaden konzentrieren sich auf die Behebung von CPU- und Netzwerkengpässen. Bei den meisten Websites sind CPU und Netzwerk die relevantesten Engpässe bei Traffic-Spitzen.
Das Ausführen von top auf dem betroffenen Server ist ein guter Ausgangspunkt, um Engpässe zu untersuchen. Ergänzen Sie diese, falls verfügbar, durch Verlaufsdaten Ihres Hostanbieters oder Monitoring-Tools.
Stabilisieren
Ein überlasteter Server kann schnell zu kaskadierenden Fehlern an anderer Stelle im System führen. Daher ist es wichtig, den Server zu stabilisieren, bevor Sie größere Änderungen vornehmen.
Ratenbegrenzung
Die Ratenbegrenzung schützt die Infrastruktur, indem die Anzahl der eingehenden Anfragen begrenzt wird. Dies ist umso wichtiger, je schlechter die Serverleistung ist: Wenn die Antwortzeiten steigen, neigen Nutzer dazu, die Seite aggressiv zu aktualisieren, was die Serverlast noch weiter erhöht.
Korrigieren
Das Ablehnen einer Anfrage ist zwar relativ kostengünstig, aber die beste Möglichkeit, Ihren Server zu schützen, besteht darin, die Ratenbegrenzung an einer Stelle vor dem Server zu verarbeiten, z. B. über einen Load Balancer, einen Reverse-Proxy oder ein CDN.
Anleitung:
Zum Weiterlesen:
HTTP-Caching
Suchen Sie nach Möglichkeiten, Inhalte aggressiver im Cache zu speichern. Wenn eine Ressource aus einem HTTP-Cache (Browser-Cache oder CDN) bereitgestellt werden kann, muss sie nicht vom Ursprungsserver angefordert werden. Dadurch wird die Serverlast reduziert.
HTTP-Header wie Cache-Control, Expires und ETag geben an, wie eine Ressource von einem HTTP-Cache im Cache gespeichert werden soll. Wenn Sie diese Header prüfen und korrigieren, wird das Caching verbessert.
Service Worker können zwar auch für das Caching verwendet werden, sie nutzen jedoch einen separaten Cache und sind eine Ergänzung, kein Ersatz für das richtige HTTP-Caching. Wenn du einen überlasteten Server hast, solltest du dich daher auf die Optimierung des HTTP-Cachings konzentrieren.
Diagnose
Führen Sie Lighthouse aus und sehen Sie sich die Prüfung Statische Assets mit einer effizienten Cache-Richtlinie bereitstellen an, um eine Liste der Ressourcen mit einer kurzen bis mittleren Gültigkeitsdauer (TTL) aufzurufen. Überlegen Sie für jede aufgeführte Ressource, ob die TTL erhöht werden sollte. Als grobe Richtlinie gilt:
- Statische Ressourcen sollten mit einer langen TTL (1 Jahr) im Cache gespeichert werden.
- Dynamische Ressourcen sollten mit einer kurzen TTL (3 Stunden) im Cache gespeichert werden.
Korrigieren
Legen Sie die Anweisung max-age des Headers Cache-Control auf die entsprechende Anzahl von Sekunden fest.
Anleitung:
Graduelle Fehlertoleranz
Die graduelle Fehlertoleranz ist eine Strategie, bei der die Funktionalität vorübergehend reduziert wird, um die übermäßige Last von einem System zu nehmen. Dieses Konzept kann auf viele verschiedene Arten angewendet werden: z. B. durch die Bereitstellung einer statischen Textseite anstelle einer voll funktionsfähigen Anwendung, durch die Deaktivierung der Suche oder die Rückgabe von weniger Suchergebnissen oder durch die Deaktivierung bestimmter teurer oder nicht wesentlicher Funktionen. Der Schwerpunkt sollte auf dem Entfernen von Funktionen liegen, die sicher und einfach mit minimalen Auswirkungen auf das Unternehmen entfernt werden können.
Verbessern
Content Delivery Network (CDN) verwenden
Die Bereitstellung statischer Assets kann von Ihrem Server auf ein Content Delivery Network (CDN) ausgelagert werden, wodurch die Last reduziert wird.
Die Hauptfunktion eines CDN besteht darin, Inhalte schnell für Nutzer bereitzustellen. Dazu wird ein großes Netzwerk von Servern verwendet, die sich in der Nähe der Nutzer befinden. Die meisten CDNs bieten jedoch auch zusätzliche leistungsbezogene Funktionen wie Komprimierung, Load Balancing und Medienoptimierung.
CDN einrichten
CDNs profitieren von der Skalierung. Daher ist es selten sinnvoll, ein eigenes CDN zu betreiben. Eine einfache CDN-Konfiguration ist relativ schnell eingerichtet (ca. 30 Minuten). Dazu müssen die DNS-Einträge so aktualisiert werden, dass sie auf das CDN verweisen.
CDN-Nutzung optimieren
Diagnose
Führen Sie WebPageTest aus, um Ressourcen zu identifizieren, die nicht über ein CDN bereitgestellt werden, obwohl sie es sollten. Klicken Sie auf der Ergebnisseite auf das Quadrat über „Effektive Nutzung von CDN“, um die Liste der Ressourcen zu sehen, die über ein CDN bereitgestellt werden sollten.
Korrigieren
Wenn eine Ressource nicht vom CDN im Cache gespeichert wird, prüfen Sie, ob die folgenden Bedingungen erfüllt sind:
- Sie hat einen
Cache-Control: public-Header. - Sie hat einen
Cache-Control: s-maxage-,Cache-Control: max-age- oderExpires-Header. - Es hat einen
Content-Length,Content-RangeoderTransfer-Encoding header.
Rechenressourcen skalieren
Die Entscheidung, Rechenressourcen zu skalieren, sollte sorgfältig getroffen werden. Obwohl es oft notwendig ist, Rechenressourcen zu skalieren, kann dies vorzeitig zu unnötiger architektonischer Komplexität und finanziellen Kosten führen.
Diagnose
Eine hohe Time to First Byte (TTFB) kann ein Zeichen dafür sein, dass ein Server seine Kapazitätsgrenze erreicht. Diese Informationen finden Sie in der Lighthouse-Prüfung Serverantwortzeiten (TTFB) reduzieren.
Verwenden Sie ein Monitoring-Tool, um die CPU-Auslastung zu prüfen. Wenn die aktuelle oder erwartete CPU-Auslastung 80 % überschreitet, sollten Sie die Anzahl der Server erhöhen.
Korrigieren
Durch das Hinzufügen eines Load Balancers kann der Traffic auf mehrere Server verteilt werden. Ein Load Balancer befindet sich vor einem Pool von Servern und leitet den Traffic an den entsprechenden Server weiter. Cloud-Anbieter bieten eigene Load Balancer (GCP, AWS, Azure) an. Sie können aber auch eigene Load Balancer mit HAProxy oder NGINX einrichten. Sobald ein Load Balancer vorhanden ist, können zusätzliche Server hinzugefügt werden.
Zusätzlich zum Load Balancing bieten die meisten Cloud-Anbieter Autoscaling an (GCP, AWS, Azure). Autoscaling funktioniert in Verbindung mit Load Balancing. Beim Autoscaling werden die Rechenressourcen je nach Bedarf zu einem bestimmten Zeitpunkt automatisch hoch- und herunterskaliert. Autoscaling ist jedoch kein Zaubermittel. Es dauert eine Weile, bis neue Instanzen online sind, und es ist eine umfangreiche Konfiguration erforderlich. Aufgrund der zusätzlichen Komplexität, die Autoscaling mit sich bringt, sollte zuerst eine einfachere, auf Load Balancern basierende Einrichtung in Betracht gezogen werden.
Komprimierung aktivieren
Textbasierte Ressourcen sollten mit gzip oder Brotli komprimiert werden. Mit Gzip kann die Übertragungsgröße dieser Ressourcen um etwa 70 % reduziert werden.
Diagnose
Verwenden Sie die Lighthouse-Prüfung Textkomprimierung aktivieren, um Ressourcen zu identifizieren, die komprimiert werden sollten.
Korrigieren
Aktivieren Sie die Komprimierung, indem Sie Ihre Serverkonfiguration aktualisieren. Anleitung:
Bilder und Medien optimieren
Bilder machen den Großteil der Dateigröße der meisten Websites aus. Durch die Optimierung von Bildern lässt sich die Größe einer Website schnell und erheblich reduzieren.
Diagnose
Lighthouse bietet eine Vielzahl von Audits, mit denen potenzielle Bildoptimierungen erkannt werden können. Alternativ können Sie die größten Bilddateien mit den Entwicklertools ermitteln. Diese Bilder sind wahrscheinlich gute Kandidaten für die Optimierung.
Relevante Lighthouse-Prüfungen:
- Bilder richtig dimensionieren
- Bilder, die nicht auf dem Bildschirm zu sehen sind, zurückstellen
- Bilder effizient codieren
- Bilder in Formaten der nächsten Generation bereitstellen
- Videoformate für animierte Inhalte verwenden
Workflow für Chrome-Entwicklertools:
- Netzwerkaktivitäten protokollieren
- Klicken Sie auf Img, um Ressourcen herauszufiltern, die keine Bilder sind.
- Klicken Sie auf die Spalte Größe, um die Bilddateien nach Größe zu sortieren.
Korrigieren
Wenn Sie nur wenig Zeit haben…
Konzentrieren Sie sich darauf, große und häufig geladene Bilder zu identifizieren und sie manuell mit einem Tool wie Squoosh zu optimieren. Hero-Images sind oft gute Kandidaten für die Optimierung.
Wichtig:
- Größe: Bilder sollten nicht größer als nötig sein.
- Komprimierung: Im Allgemeinen hat eine Qualitätsstufe von 80–85 nur minimale Auswirkungen auf die Bildqualität, während die Dateigröße um 30–40 % reduziert wird.
- Format: Verwenden Sie für Fotos JPEGs statt PNGs und für animierte Inhalte MP4s statt GIFs.
Wenn Sie mehr Zeit haben…
Wenn Bilder einen wesentlichen Teil Ihrer Website ausmachen, sollten Sie ein Bild-CDN einrichten. Bild-CDNs sind für die Bereitstellung und Optimierung von Bildern konzipiert und entlasten den Ursprungsserver bei der Bildbereitstellung. Das Einrichten eines Bild-CDN ist unkompliziert, erfordert jedoch die Aktualisierung vorhandener Bild-URLs, damit sie auf das Bild-CDN verweisen.
Zum Weiterlesen:
JS und CSS reduzieren
Durch die Reduzierung werden unnötige Zeichen aus JavaScript und CSS entfernt.
Diagnose
Verwenden Sie die Lighthouse-Prüfungen CSS minimieren und JavaScript minimieren, um Ressourcen zu identifizieren, die minimiert werden müssen.
Korrigieren
Wenn Sie nur wenig Zeit haben, konzentrieren Sie sich auf die Minimierung Ihres JavaScripts. Die meisten Websites haben mehr JavaScript als CSS, daher ist dies wirkungsvoller.
Überwachen
Server-Monitoring-Tools bieten Datenerhebung, Dashboards und Benachrichtigungen zur Serverleistung. Ihre Verwendung kann dazu beitragen, zukünftige Leistungsprobleme des Servers zu verhindern und zu minimieren.
Eine Monitoring-Einrichtung sollte so einfach wie möglich gehalten werden. Übermäßige Datenerhebung und Benachrichtigungen haben ihren Preis: Je größer der Umfang oder die Häufigkeit der Datenerhebung, desto teurer ist die Erhebung und Speicherung. Übermäßige Benachrichtigungen führen unweigerlich dazu, dass Seiten ignoriert werden.
Für Benachrichtigungen sollten Messwerte verwendet werden, mit denen Probleme konsistent und genau erkannt werden. Die Serverantwortzeit (Latenz) ist ein Messwert, der sich dafür besonders gut eignet: Er erfasst eine Vielzahl von Problemen und korreliert direkt mit der Nutzererfahrung. Benachrichtigungen auf der Grundlage von Messwerten auf niedrigerer Ebene wie der CPU-Auslastung können eine nützliche Ergänzung sein, erfassen aber nur einen kleineren Teil der Probleme. Außerdem sollten Benachrichtigungen auf der Leistung am Ende (also dem 95. oder 99. Perzentil) und nicht auf Durchschnittswerten basieren. Andernfalls können Durchschnittswerte leicht Probleme verschleiern, die nicht alle Nutzer betreffen.
Korrigieren
Alle großen Cloud-Anbieter bieten eigene Monitoring-Tools an (GCP, AWS, Azure). Darüber hinaus ist Netdata eine hervorragende kostenlose Open-Source-Alternative. Unabhängig davon, für welches Tool Sie sich entscheiden, müssen Sie den Monitoring-Agent des Tools auf jedem Server installieren, den Sie überwachen möchten. Richten Sie nach Abschluss die Benachrichtigungen ein.
Anleitung: