Warum reagiert meine EC2-Linux-Instance aufgrund einer Überlastung von Ressourcen nicht mehr?
Letzte Aktualisierung: 25.10.2021
Meine Linux-Instance von Amazon Elastic Compute Cloud (Amazon EC2) reagiert aufgrund einer Überlastung von Ressourcen nicht mehr. Wie kann ich das verhindern?
Kurzbeschreibung
Es gibt mehrere häufige Ursachen, warum eine Instance nicht mehr reagiert:
Speicher: EC2-Instances haben standardmäßig keinen Swap-Speicherplatz zugewiesen. Wenn der Speicher knapp wird, kann das den Linux-Out-Of-Memory (OOM)-Manager aufrufen. Der OOM-Manager beendet Prozesse wie eine Datenbank, einen Webserver oder den SSH-Dienst.
Vernetzung: Ohne Netzwerk kann Ihr System ARP-Anfragen von Statusprüfungen nicht beantworten. In diesem Fall kommuniziert Ihre Instance nicht mit anderen Hosts.
Amazon Elastic Block Store (Amazon EBS): Ohne Festplatten-E/A bleiben Lese- oder Schreibanweisungen hängen. Zum Beispiel die Erstellung temporärer Dateien, das Lesen aus Systembibliotheken oder Datenbanken.
CPU: Alle vorhergehenden Aufgaben benötigen CPU-Zeit, um zu funktionieren. Eine 100%-ige CPU-Auslastung über einen längeren Zeitraum hindert den Kernel daran, normale Betriebssystem-Operationen auszuführen.
Diese Probleme können sich auch zu einem Schneeballeffekt akkumulieren. Beispielsweise läuft Ihnen der Speicher aus und der OOM-Manager beendet einen wichtigen Prozess. Jetzt startet ein zweiter Prozess, der auf dem ersten gestoppten Prozess beruht, eine viel höhere Anzahl von CPU-Zyklen. Wenn diese Aufgabe festplattenbezogen ist, kann dieser Zyklus auch das EBS-Volumen erschöpfen. Außerdem kann das Problem auf eine andere Instance übertragen werden, die eine Kommunikation von der nicht reagierenden Instance erwartet.
Auflösung
Wenn Ihr System aufgrund einer Überlastung von Ressourcen häufig nicht mehr reagiert, gehen Sie wie folgt vor:
Sammeln Sie Informationen
- Verwenden Sie ein Überwachungstool wie Amazon CloudWatch, um Trends und Muster einer hohen Ressourcenauslastung zu beobachten.
- Wenn Sie über mehrere Dienste verfügen und nicht sicher sind, welcher Ressourcen übermäßig nutzt, installieren Sie ein Dienstprogramm wie atop.
- Überprüfen Sie die Protokolle Ihrer Anwendung und Ihres Betriebssystems. Diese Protokolle befinden sich normalerweise in /var/log/.
- Überprüfen Sie den Verlauf der Befehle, um festzustellen, ob menschliches Versagen vorliegt. Der Befehlsverlauf befindet sich normalerweise in der Datei ~/.bash_history.
- Überprüfen Sie Cronjobs, indem Sie den Befehl crontab -l ausführen.
Handeln Sie basierend auf den erfassten Daten
- Möglicherweise sind für Ihre Anwendung Konfigurations- oder Codeänderungen erforderlich, um die Ressourcenauslastung zu optimieren.
- Wenn Ihre Prozesse aus triftigen Gründen, wie z. B. einer hohen Benutzereinnahme, viele Ressourcen nutzen, erwägen Sie ein Upgrade Ihrer Instance.
AWS Compute Optimizer ist eine nützliche Quelle für die Generierung empfohlener Instance-Größen. Sie können auch eine horizontale Skalierung mithilfe von Amazon EC2 Auto Scaling in Betracht ziehen. - Wenn Sie mehr Sichtbarkeit über Benutzerbefehle und Konfigurationsänderungen wünschen, können Sie audit installieren, um Änderungen nachzuverfolgen.
Verhindern Sie zukünftige Überauslastung
- Erstellen Sie vor der Bereitstellung einer neuen Anwendung in der Produktion eine Testumgebung und einen Benchmark, um die erforderliche Rechenleistung, den Arbeitsspeicher, das EBS und das Netzwerk zu ermitteln.
- Implementieren Sie gemäß Ihren Benchmarks und bauen Sie gleichzeitig auf Fehlertoleranz. Weitere Informationen finden Sie unter den folgenden Links:
Entwerfen von Interaktionen in einem verteilten System, um Ausfälle zu vermeiden
Einrichten einer automatisch skalierten Anwendung mit Lastausgleich - Überwachen Sie Ihre Instances weiter und erstellen Sie Alarme für bestimmte Schwellenwerte für die Ressourcennutzung.
War dieser Artikel hilfreich?
Benötigen Sie Hilfe zur Fakturierung oder technischen Support?