Serverüberlastung beheben

Engpässe identifizieren, schnell beheben, Leistung des Servers verbessern und Regressionen verhindern.

Katie Hempenius
Katie Hempenius

In dieser Anleitung erfährst du, wie du einen überlasteten Server in vier Schritten reparieren kannst:

  1. Bewerten: Ermitteln Sie den Engpass des Servers.
  2. Stabilisieren: Implementieren Sie Schnellkorrekturen, um die Auswirkungen zu verringern.
  3. Verbessern: Erweitern und optimieren Sie die Serverfunktionen.
  4. Überwachen: Verwenden Sie automatisierte Tools, um zukünftige Probleme zu vermeiden.

Evaluieren

Wenn Traffic einen Server überlastet, kann einer oder mehrere der folgenden Faktoren zu einem Engpass werden: CPU, Netzwerk, Arbeitsspeicher oder Laufwerk-E/A. Wenn Sie wissen, was der Engpass ist, können Sie sich auf die wirkungsvollsten Abwehrmaßnahmen konzentrieren.

  • CPU: Eine CPU-Auslastung, die konstant über 80% liegt, sollte untersucht und behoben werden. Die Serverleistung sinkt häufig, wenn die CPU-Auslastung ~80–90 % erreicht, und wird stärker ausgeprägt, wenn sich die CPU-Auslastung dem Wert 100 % nähert. Die CPU-Auslastung beim Verarbeiten einer einzelnen Anfrage ist vernachlässigbar. Wenn sie jedoch bei Traffic-Spitzen genutzt wird, kann sie einen Server mitunter überfordern. Die Verlagerung der Bereitstellung auf andere Infrastrukturen, die Reduzierung kostspieliger Vorgänge und die Begrenzung der Anzahl der Anfragen verringern die CPU-Auslastung.
  • Netzwerk: Bei hohem Traffic kann der zur Erfüllung von Nutzeranfragen erforderliche Netzwerkdurchsatz die Kapazität überschreiten. Bei einigen Websites kann es je nach Hostanbieter zu Einschränkungen bei der Übertragung von Daten kommen. Durch das Reduzieren der Größe und Menge der Daten, die zum und vom Server übertragen werden, wird dieser Engpass beseitigt.
  • Arbeitsspeicher: Wenn ein System nicht genügend Arbeitsspeicher hat, müssen Daten zur Speicherung auf das Laufwerk übertragen werden. Der Zugriff auf Laufwerke und Speicher ist wesentlich langsamer als auf Arbeitsspeicher, was eine ganze Anwendung verlangsamen kann. Wenn der Arbeitsspeicher vollständig erschöpft ist, kann dies zu Fehlern des Typs Out of Memory (OOM) führen. Das Anpassen der Arbeitsspeicherzuweisung, das Beheben von Speicherlecks und das Aktualisieren des Arbeitsspeichers können diesen Engpass beseitigen.
  • Laufwerks-E/A: Die Geschwindigkeit, mit der Daten vom Laufwerk gelesen oder geschrieben werden können, wird durch das Laufwerk selbst eingeschränkt. Wenn die Laufwerks-E/A ein Engpass ist, kann eine Erhöhung der im Arbeitsspeicher gespeicherten Datenmenge das Problem beheben, allerdings auf Kosten einer erhöhten Arbeitsspeicherauslastung. Wenn dies nicht funktioniert, ist möglicherweise ein Upgrade Ihrer Laufwerke erforderlich.

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 während einer Zugriffsspitze.

Wenn Sie top auf dem betroffenen Server ausführen, ist das ein guter Ausgangspunkt, um Engpässe zu untersuchen. Ergänzen Sie diese Daten gegebenenfalls durch Verlaufsdaten von Ihrem Hostanbieter oder Ihren Monitoring-Tools.

Stabilisieren

Ein überlasteter Server kann an anderer Stelle im System schnell zu kaskadierenden Ausfällen führen. Daher ist es wichtig, den Server zu stabilisieren, bevor größere Änderungen vorgenommen werden.

Ratenbegrenzung

Die Ratenbegrenzung schützt die Infrastruktur, indem die Anzahl der eingehenden Anfragen begrenzt wird. Dies wird mit zunehmender Serverleistung immer wichtiger: Je länger die Antwortzeiten sind, desto höher ist die Tendenz der Nutzer, die Seite aggressiv zu aktualisieren, wodurch sich die Serverlast noch weiter erhöht.

Problembehebung

Auch wenn das Ablehnen einer Anfrage relativ kostengünstig ist, besteht der beste Schutz Ihres Servers darin, die Ratenbegrenzung irgendwo vorgelagert zu handhaben, 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 bereitgestellt werden kann (unabhängig davon, ob es sich um den Browsercache oder ein CDN handelt), 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. Das Prüfen und Korrigieren dieser Header verbessert das Caching.

Obwohl auch Service Worker zum Caching verwendet werden können, wird für ein ordnungsgemäßes HTTP-Caching ein separater Cache verwendet. Diese sind eine Ergänzung, kein Ersatz. Aus diesem Grund sollten Sie sich beim Umgang mit einem überlasteten Server auf die Optimierung des HTTP-Caching 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 von Ressourcen mit einer kurzen bis mittleren Gültigkeitsdauer (TTL) zu erhalten. Überlegen Sie für jede aufgeführte Ressource, ob die TTL erhöht werden sollte. Zur Orientierung:

  • 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.

Problembehebung

Legen Sie die max-age-Anweisung des Cache-Control-Headers auf die entsprechende Anzahl von Sekunden fest.

Anleitung:

Graceful Degradation

Bei Graceful Degradation wird die Funktionalität vorübergehend reduziert, um eine übermäßige Belastung eines Systems zu verhindern. Dieses Konzept kann auf viele verschiedene Arten angewendet werden: zum Beispiel das Bereitstellen einer statischen Textseite anstelle einer voll funktionsfähigen Anwendung, das Deaktivieren der Suche oder die Ausgabe von weniger Suchergebnissen oder das Deaktivieren bestimmter teurer oder nicht wesentlicher Funktionen. Betonen Sie das Entfernen von Funktionen, die sich sicher und einfach mit minimalen Auswirkungen auf das Geschäft entfernen lassen.

Verbessern

Content Delivery Network (CDN) verwenden

Die Bereitstellung statischer Assets kann von Ihrem Server in ein Content Delivery Network (CDN) ausgelagert werden, wodurch die Last reduziert wird.

Die Hauptfunktion eines CDN besteht darin, Inhalte schnell für Nutzer bereitzustellen, indem ein großes Netzwerk von Servern bereitgestellt wird, 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, sodass der Betrieb eines eigenen CDN selten sinnvoll ist. Eine grundlegende CDN-Konfiguration lässt sich relativ schnell einrichten (ca. 30 Minuten) und besteht aus der Aktualisierung von DNS-Einträgen, die auf das CDN verweisen.

CDN-Nutzung optimieren

Diagnose

Ermitteln Sie Ressourcen, die nicht von einem CDN bereitgestellt werden (aber sollten), indem Sie WebPageTest ausführen. Klicken Sie auf der Ergebnisseite auf das Quadrat über „Effektive Verwendung von CDN“, um die Liste der Ressourcen aufzurufen, die von einem CDN bereitgestellt werden sollen.

Pfeil, der auf die Schaltfläche „Effektive Nutzung des CDN“ zeigt
Ergebnisse von WebPageTest

Problembehebung

Wenn eine Ressource nicht vom CDN im Cache gespeichert wird, prüfen Sie, ob die folgenden Bedingungen erfüllt sind:

Rechenressourcen skalieren

Die Entscheidung, Rechenressourcen zu skalieren, sollte mit Bedacht getroffen werden. Obwohl es häufig notwendig ist, Rechenressourcen zu skalieren, kann dies zu einer unnötigen architektonischen Komplexität und finanziellen Kosten führen.

Diagnose

Ein hoher Time To First Byte (TTFB) kann ein Zeichen dafür sein, dass ein Server seine Kapazität fast erreicht hat. Diese Informationen finden Sie in der Lighthouse-Prüfung Serverantwortzeiten reduzieren (TTFB).

Verwenden Sie zur weiteren Untersuchung ein Monitoring-Tool, um die CPU-Auslastung zu ermitteln. Wenn die aktuelle oder erwartete CPU-Auslastung 80% übersteigt, sollten Sie erwägen, Ihre Server zu erhöhen.

Problembehebung

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 an (GCP, AWS, Azure) oder Sie können mit HAProxy oder NGINX eigene einrichten. Sobald ein Load-Balancer eingerichtet ist, können weitere Server hinzugefügt werden.

Zusätzlich zum Load-Balancing bieten die meisten Cloud-Anbieter Autoscaling (GCP, AWS, Azure). Das Autoscaling funktioniert in Verbindung mit Load-Balancing. Dabei werden Rechenressourcen zu einem bestimmten Zeitpunkt automatisch nach oben oder unten skaliert. Allerdings ist das Autoscaling nicht einfach. Es braucht eine gewisse Zeit, bis neue Instanzen online gehen, und erfordert umfangreiche Konfiguration. Aufgrund der zusätzlichen Komplexität, die Autoscaling mit sich bringt, sollte eine einfachere, auf Load-Balancern basierende Einrichtung zuerst in Betracht gezogen werden.

Komprimierung aktivieren

Textbasierte Ressourcen sollten mit gzip oder Brotli komprimiert werden. Gzip kann die Übertragungsgröße dieser Ressourcen um etwa 70 % reduzieren.

Diagnose

Verwenden Sie die Lighthouse-Prüfung Textkomprimierung aktivieren, um Ressourcen zu ermitteln, die komprimiert werden sollten.

Problembehebung

Aktiviere die Komprimierung, indem du deine Serverkonfiguration aktualisierst. Anleitung:

Bilder und Medien optimieren

Bei den meisten Websites machen Bilder den Großteil der Dateigröße aus. Durch die Optimierung von Bildern kann die Größe einer Website schnell und deutlich reduziert werden.

Diagnose

In Lighthouse werden verschiedene Prüfungen durchgeführt, um potenzielle Bildoptimierungen zu erkennen. Alternativ können Sie auch die Entwicklertools verwenden, um die größten Bilddateien zu ermitteln – diese Bilder sind wahrscheinlich gute Kandidaten für die Optimierung.

Relevante Lighthouse-Prüfungen:

Workflow für die Chrome-Entwicklertools:

Problembehebung

Wenn Sie nur wenig Zeit haben...

Konzentrieren Sie sich darauf, große und häufig geladene Bilder zu ermitteln und sie mit einem Tool wie Squoosh manuell 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 wirkt sich eine Qualitätsstufe von 80 bis 85 nur minimal auf die Bildqualität aus, während die Dateigröße um 30 bis 40% reduziert wird.
  • Format: Verwenden Sie für Fotos JPEGs statt PNG und MP4 für animierte Inhalte statt GIF.

Wenn du mehr Zeit hast...

Sie können ein Bild-CDN einrichten, wenn Bilder einen großen Teil Ihrer Website ausmachen. Bild-CDNs dienen der Bereitstellung und Optimierung von Bildern und entlasten die Bildbereitstellung vom Ursprungsserver. Das Einrichten eines Bild-CDN ist unkompliziert, erfordert jedoch, dass vorhandene Bild-URLs so aktualisiert werden, dass 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

Nutzen Sie die Lighthouse-Audits zu Minify CSS und Minify JavaScript, um Ressourcen zu identifizieren, die reduziert werden müssen.

Problembehebung

Wenn Sie nur wenig Zeit haben, versuchen Sie, Ihr JavaScript zu reduzieren. Die meisten Websites verwenden mehr JavaScript als CSS, sodass dies wirkungsvoller ist.

Überwachen

Server-Monitoring-Tools bieten Datenerfassung, Dashboards und Benachrichtigungen zur Serverleistung. Ihre Nutzung kann dazu beitragen, zukünftige Serverleistungsprobleme zu vermeiden und zu mindern.

Die Einrichtung des Monitorings sollte so einfach wie möglich gehalten werden. Übermäßige Datenerhebungen und Benachrichtigungen haben Kosten: Je größer der Umfang oder die Häufigkeit der Datenerfassung, desto teurer ist die Erfassung und Speicherung. Übermäßig viele Benachrichtigungen führen zwangsläufig zu ignorierten Seiten.

Für Benachrichtigungen sollten Messwerte verwendet werden, die Probleme konsistent und genau erkennen. Die Serverantwortzeit (Latenz) ist ein Messwert, der dafür besonders gut funktioniert: Er erkennt eine Vielzahl von Problemen und hängt direkt mit der Nutzererfahrung zusammen. Benachrichtigungen auf Basis niedrigerer Messwerte wie CPU-Nutzung können eine nützliche Ergänzung sein, aber Sie können eine kleinere Teilmenge von Problemen erkennen. Außerdem sollten Benachrichtigungen auf Basis der am Ende beobachteten Leistung (d. h. auf dem 95. oder 99. Perzentil) und nicht auf Durchschnittswerten basieren. Andernfalls können Durchschnittswerte leicht Probleme verdecken, von denen nicht alle Nutzer betroffen sind.

Problembehebung

Alle großen Cloud-Anbieter bieten eigene Monitoringtools 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 anschließend Benachrichtigungen ein.

Anleitung: