Warum reagiert meine EC2 Linux Instance aufgrund einer Überlastung der Ressourcen nicht mehr?

Lesedauer: 7 Minute
0

Meine Amazon Elastic Compute Cloud (Amazon EC2) Linux Instance reagiert aufgrund einer Überlastung der Ressourcen nicht mehr. Wie kann ich das verhindern?

Kurzbeschreibung

Es gibt mehrere häufige Ursachen dafür, dass eine Instance nicht mehr reagiert:

  • **Speicher:**EC2 Instances haben standardmäßig keinen zugewiesenen Swap-Speicherplatz. Wenn der Speicher knapp wird, wird der Linux Out Of Memory (OOM) Manager aufgerufen. Der OOM-Manager beendet Prozesse wie eine Datenbank, einen Webserver oder den SSH-Dienst.
  • **Netzwerk:**Ohne Netzwerk kann Ihr System keine ARP-Anfragen von Statusprüfungen beantworten. In diesem Fall kann Ihre Instance nicht mit anderen Hosts kommunizieren.
  • **I/O-Operationen:**Ohne Festplatten-I/O bleiben Lese- oder Schreibanweisungen hängen. Zum Beispiel die Erstellung temporärer Dateien, Lesevorgänge aus Systembibliotheken oder Datenbanken.
  • **CPU:**Alle vorgenannten Aufgaben benötigen CPU-Zeit, um zu funktionieren. Eine 100-prozentige CPU-Auslastung über einen längeren Zeitraum verhindert, dass der Kernel normale Betriebssystemoperationen ausführt.

Diese Probleme können sich auch zu einem Schneeballeffekt anhäufen. Beispielsweise geht Ihnen der Arbeitsspeicher aus und der OOM-Manager beendet einen wichtigen Prozess. Jetzt startet ein zweiter Prozess, der auf dem ersten Prozess basiert, der gestoppt wurde, eine viel höhere Anzahl von CPU-Zyklen. Wenn diese Aufgabe festplattenbezogen ist, kann dieser Zyklus auch das Amazon Elastic Block Store (Amazon EBS) Volume erschöpfen. Das Problem kann auch auf eine andere Instance übertragen werden, die eine Datenübertragung von der Instance erwartet, die nicht reagiert.

Behebung

Wenn Ihr System eine hohe CPU-Auslastung hat oder aufgrund einer Überlastung der Ressourcen häufig nicht reagiert, gehen Sie wie folgt vor:

Informationen sammeln

**Überwachen Sie die CPU-Auslastung mit Amazon CloudWatch **

Verwenden Sie ein Überwachungstool wie Amazon CloudWatch, um Trends und Muster hoher Ressourcenauslastung zu beobachten.

Verwenden Sie Tools zur Systemüberwachung

Wenn Sie mehrere Dienste haben und sich nicht sicher sind, welcher die Ressourcen überbeansprucht, installieren Sie ein Hilfsprogramm wie atop. Sie können auch Tools wie htop, top und sar verwenden. All diese Tools helfen dabei, Prozesse zu identifizieren, die die meiste CPU-Auslastung verursachen. Weitere Informationen finden Sie im Folgenden:

**Erfahren Sie mehr über den Prozess, der eine hohe CPU-Auslastung aufweist **

Verwenden Sie den Befehl pidstat oder ps, um detailliertere Informationen über den Prozess zu erhalten. Anhand der in der Befehlsausgabe bereitgestellten Informationen können Sie feststellen, ob es sich bei dem Prozess um einen System- oder Benutzerprozess handelt. Weitere Informationen zur Konfiguration und Verwendung der Tools, die zum Ausführen dieser Befehle erforderlich sind, finden Sie in den folgenden Abschnitten:

Überprüfen Sie die Systemprotokolle

Überprüfen Sie Fehler oder Warnungen, die mit einer hohen CPU-Auslastung zusammenhängen. Verwenden Sie zum Beispiel den Befehl dmesg, um Kernelmeldungen anzuzeigen, und schauen Sie sich für Systemmeldungen die Dateien /var/log/syslog oder /var/log/messages an. Die Befehlsausgabe und der Inhalt der Protokolldatei helfen dabei, System- oder Anwendungsprobleme zu identifizieren, die andere Probleme verursachen.

Befehlsverlauf überprüfen

Überprüfen Sie den Befehlsverlauf, um festzustellen, ob menschliches Versagen aufgetreten ist. Der Befehlsverlauf befindet sich normalerweise in der Datei ~/.bash\ _history.

Suchen Sie nach geplanten Jobs

Prüfen Sie, ob auf der EC2 Instance geplante Jobs oder Cronjobs ausgeführt werden, die zu einer hohen CPU-Auslastung führen könnten. Bestätigen Sie zunächst den Zeitstempel der hohen CPU-Auslastung. Führen Sie dann den folgenden Befehl aus, um die Cronjobs aufzulisten:

sudo crontab -l
sudo cat /etc/crontab
sudo cat crontab -l -u <username>

Der vorherige Befehl listet die Crontab-Konfiguration für den Root-Benutzer auf. Fügen Sie die Option**-u** in den Befehl ein, um Cron für einen bestimmten Benutzer zu überprüfen. Suchen Sie dann nach der Zeit, in der Sie das Problem bemerkt haben. Überprüfen Sie Ihre Protokolle, einschließlich der folgenden:

/var/log/messages
/var/log/syslog
/var/log/dmesg
/var/log/cron.log

Verwenden Sie den Befehl grep, um relevante Einträge für die spezifischen Cronjobs zu filtern, die Sie untersuchen möchten. Schauen Sie, ob Fehler aufgetreten sind, die mit einem der identifizierten Crons zusammenhängen.

Speicherauslastung überprüfen

Eine hohe Speicherauslastung kann aufgrund der Auslastung des Swap-Speichers zu einer hohen CPU-Auslastung führen. Verwenden Sie den Befehl free, um die Speicherauslastung zu überprüfen. Weitere Informationen zur Konfiguration und Verwendung der erforderlichen Tools finden Sie unter Dissecting the free command auf der Website redhat.com.

Überprüfen Sie den Netzwerkverkehr

Hoher Netzwerkverkehr kann zu einer hohen CPU-Auslastung führen, insbesondere wenn die Instance viele Netzwerkanfragen verarbeitet. Verwenden Sie den Befehl iftop, um den Netzwerkverkehr zu überwachen, und optimieren Sie gegebenenfalls Ihre Netzwerkkonfiguration oder aktualisieren Sie Ihren Instance-Typ. Weitere Informationen zur Konfiguration und Verwendung der erforderlichen Tools finden Sie unter Linux-Schnittstellenanalyse auf Abruf mit iftop auf der Website redhat.com.

Überprüfen Sie die Festplatten-I/O

Hohe Festplatten-I/O können zu einer hohen CPU-Auslastung führen. Verwenden Sie den Befehl iostat, um die Festplatten-I/O zu überwachen und alle Prozesse zu identifizieren, die zu hohen I/O-Werten führen könnten. Weitere Informationen finden Sie unter I/O-Reporting über die Linux-Befehlszeile auf der Website redhat.com.

Handeln Sie auf der Grundlage der erfassten Daten

Optimieren Sie den Code

Wenn Ihre Anwendung eine hohe CPU-Auslastung verursacht, optimieren Sie Ihren Code. Identifizieren und beseitigen Sie dazu Leistungsengpässe. Tools zur Profilerstellung wie perf oder strace helfen dabei, problematischen Code zu identifizieren. Weitere Informationen zur Konfiguration und Verwendung der erforderlichen Tools finden Sie im Folgenden:

Aktualisieren Sie Ihre Instance

Wenn Ihre Prozesse aus triftigen Gründen, wie z. B. einer hohen Anzahl von Benutzern, viele Ressourcen beanspruchen, sollten Sie erwägen, Ihre Instance zu aktualisieren.

AWS Compute Optimizer kann Ihnen bei der Auswahl des geeigneten Instance-Typs und der zu verwendenden Instance-Größe helfen. Sie können auch eine horizontale Skalierung mit Amazon EC2 Auto Scaling in Betracht ziehen.

Konfigurieren Sie die Linux-Auditregeln

Wenn Sie mehr Transparenz über Benutzerbefehle und Konfigurationsänderungen wünschen, können Sie das Linux-Audit-System so konfigurieren, dass Änderungen nachverfolgt werden.

Künftige Überauslastung verhindern

  1. Bevor Sie eine neue Anwendung in der Produktion bereitstellen, sollten Sie eine Testumgebung und einen Benchmark erstellen, um zu ermitteln, was an Rechenleistung, Arbeitsspeicher, EBS und Netzwerk erforderlich ist. Implementieren Sie gemäß Ihren Benchmarks und bauen Sie gleichzeitig auf Fehlertoleranz. Weitere Informationen finden Sie im Folgenden:
    Entwerfen von Interaktionen in einem verteilten System, um Ausfälle zu vermeiden
    Tutorial: Einrichten einer skalierten Anwendung mit Lastenausgleich
  2. Stellen Sie sicher, dass die auf der Instance ausgeführten Anwendungen für die Leistung optimiert sind. Die Optimierung beinhaltet das Optimieren von Konfigurationsdateien, die Optimierung von Datenbankabfragen oder die Optimierung von Code.
  3. Wenn Ihre Anwendung datenbankintensiv ist, sollten Sie die Implementierung von Caching in Betracht ziehen, um die Anzahl der Abfragen an die Datenbank zu reduzieren.
  4. Stellen Sie sicher, dass Ihre Software mit den neuesten Sicherheitspatches und Bugfixes auf dem neuesten Stand ist. Veraltete Software kann zu Leistungsproblemen und Sicherheitslücken führen, die zu einer hohen CPU-Auslastung führen.
  5. Wenn Ihre Anwendung viel Verkehr anzieht, sollten Sie erwägen, einen Load Balancer zu verwenden, um den Datenverkehr auf mehrere EC2 Instances zu verteilen. Ein Load Balancer reduziert die CPU-Auslastung auf jeder Instanz.
  6. Überwachen Sie weiterhin Ihre Instances und erstellen Sie Alarme für bestimmte Schwellenwerte für die Ressourcennutzung.
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 10 Monaten