Wie behebe ich Probleme mit hoher Speicherauslastung auf meiner EC2-Linux-Instance?
Ich möchte Probleme mit hoher Speicherauslastung in meiner Amazon Elastic Compute Cloud (Amazon EC2) Linux-Instance beheben.
Kurzbeschreibung
Wenn EC2 Linux-Instances eine hohe Speicherauslastung erfahren, kann dies zu einer Verschlechterung der Systemleistung oder zum Einfrieren führen. Diese Leistungsprobleme treten in der Regel aufgrund von Speicherlecks, ressourcenintensiven Prozessen oder unzureichender Speicherzuweisung auf. Um diese Probleme zu beheben, verwende zunächst die Linux-Systemtools, um die Ursache des Problems zu ermitteln. Befolge dann die Schritte zur Fehlerbehebung für die Ursache des Problems.
Lösung
Identifiziere die Ursache des Problems
Identifiziere die Speichernutzungsmuster für die EC2-Instance, um die Ursache des Problems zu ermitteln. Führe den folgenden Befehl aus, um die aktuelle Speichernutzung zu überprüfen:
free -h
Beispielausgabe:
total used free shared buff/cache available Mem: 15Gi 7.2Gi 2.1Gi 1.2Gi 5.7Gi 6.3Gi Swap: 8Gi 6.5Gi 1.5Gi
Führe den Befehl top aus, um speicherintensive Prozesse auf der EC2-Linux-Instance zu finden:
top
Beispielausgabe:
top - 14:23:45 up 15 days, 3:42, 1 user, load average: 2.15, 1.98, 1.75 Tasks: 256 total, 2 running, 254 sleeping, 0 stopped, 0 zombie %Cpu(s): 24.8 us, 12.3 sy, 0.0 ni, 62.1 id, 0.8 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 32768.0 total, 2453.2 free, 24156.4 used, 6158.4 buff/cache MiB Swap: 4096.0 total, 3012.5 free, 1083.5 used. 2537.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 mysql 20 0 18.2g 15.1g 5.1g S 45.0 47.2 220:31 mysqld 5678 tomcat 20 0 12.8g 11.2g 124m S 85.2 70.1 445:22 java
Führe den folgenden Befehl aus, um Prozesse zu finden, die den meisten Speicher in der Instance verbrauchen:
ps aux --sort=-%mem | head -n 5
Beispielausgabe:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 1234 45.0 47.2 18.2g 15.1g ? Ssl Jan10 220:31 mysqldjava 5678 85.2 70.1 12.8g 11.2g ? Ssl Jan12 445:22 javaapache 9012 25.3 23.8 4.2g 3.8g ? Ss Jan12 178:44 httpd
Eine hohe Swap-Aktivität kann das System erheblich verlangsamen. Weitere Informationen findest du unter Aktivieren des Instance-Speicher-Swap-Volumes für M1- und C1-EC2-Instances.
Führe den folgenden Befehl aus, um nach Swap-Fehlern zu suchen:
vmstat 1 5
Beispielausgabe:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 6650880 2150012 189408 5678024 45 67 234 567 300 450 65 15 10 10 0
Behebe das Problem anhand der Speichernutzungsmuster
Die Instance hat eine hohe Swap-Nutzungsrate
Führe die folgenden Schritte aus:
-
Führe den folgenden Befehl aus, um Swappiness zu reduzieren:
sudo sysctl vm.swappiness=10 -
Führe den folgenden Befehl aus, um den Swap zu löschen:
# Find processes using most swap $ smem -s swap -r # For specific process, check its swap usage $ grep VmSwap /proc/[PID]/status # Restart specific high-swap-usage processes during low-traffic periods $ systemctl restart [service-name] # Use Extreme caution when running this command - can cause OOM kills if physical memory is insufficient: $ sudo swapoff -a && sudo swapon -aWichtig: Wenn der physische Speicher der Instance für den Befehl Swap nicht ausreicht, erhältst du möglicherweise Out-of-Memory(OOM)-Fehler.
-
Wenn die Instance mehr Speicherplatz benötigt, führe den folgenden Befehl aus:
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
Es gibt systemweite Speicherprobleme
Führe die folgenden Schritte aus:
-
Führe die folgenden Befehle aus, um nach OOM-Fehler zu suchen:
sudo grep -i 'out of memory' /var/log/syslog sudo dmesg | grep -i 'out of memory' sudo journalctl -k | grep -i 'oom' sudo grep -i 'killed process' /var/log/messages -
Um die Speicherauslastung für die Instance zu überwachen, führe den folgenden Befehl aus:
watch -n 1 free -m -
Führe den folgenden Befehl aus, um nach verfügbaren Speicherseiten zu suchen:
cat /proc/buddyinfo
Informationen findest du unter Amazon EC2-Instance-Typen.
**In den Java-Anwendungen gibt es Speicherlecks **
Führe die folgenden Schritte aus:
- Führe den folgenden Befehl aus, um die Heap-Größe anzupassen:
**Hinweis:**Ersetze 2 g und 4 g durch die minimalen und maximalen Heap-Größen für die Anwendung.java -Xms2g -Xmx4g -jar application.jar - Führe den folgenden Befehl aus, um die Garbage Collection (GC)-Protokollierung zu aktivieren:
**Hinweis:**Ersetze gc.log durch den Protokolldateinamen und Pfad.java -Xlog:gc*=debug:file=gc.log -jar application.jar - Führe den folgenden Befehl aus, um den G1-Garbage Collector zur besseren Verwaltung des Instance-Speichers zu verwenden:
Hinweis: Ersetze -XX:+UseG1GC durch den bevorzugten Garbage Collection-Algorithmus.java -XX:+UseG1GC -jar application.jar
Es gibt Probleme mit den Datenbankservern
Führe die folgenden Schritte aus:
-
Führe den folgenden Befehl aus, um bestimmte Datenbankserverprozesse zu überwachen:
ps -eo pid,ppid,cmd,%mem,%cpu,rss,vsz | grep mysql -
Führe den folgenden Befehl aus, um die Nutzung des InnoDB-Pufferpools zu überprüfen:
mysql -e "SHOW ENGINE INNODB STATUS\G" | grep "Buffer pool" -
Führe den folgenden Befehl aus, um den Speicherverbrauch für jede Verbindung zu analysieren:
mysql -e "SHOW VARIABLES LIKE '%buffer%';"
Informationen zur Optimierung der Datenbankserverleistung findest du unter Bewährte Methoden für die Arbeit mit MySQL.
Ähnliche Informationen
Metriken, Protokolle und Traces mit dem CloudWatch-Agenten erfassen
- Themen
- Compute
- Tags
- Amazon EC2Linux
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor 2 Jahren