Comment résoudre les problèmes d'utilisation élevée de la mémoire sur mon instance Linux EC2 ?
Je souhaite résoudre les problèmes d'utilisation élevée de la mémoire dans mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2).
Brève description
Lorsque les instances Linux EC2 connaissent une utilisation élevée de la mémoire, il peut s’ensuivre une dégradation des performances du système ou un blocage. Ces problèmes de performance sont généralement dus à des fuites de mémoire, à des processus gourmands en ressources ou à une allocation de mémoire insuffisante. Pour résoudre ces problèmes, utilisez d'abord les outils du système Linux pour identifier la cause première du problème. Puis, suivez les étapes de dépannage pour déterminer la cause du problème.
Résolution
Identifier la cause racine du problème
Pour identifier la cause du problème, identifiez les modèles d'utilisation de la mémoire pour votre instance EC2. Pour vérifier l'utilisation actuelle de la mémoire, exécutez la commande suivante :
free -h
Exemple de sortie :
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
Pour rechercher des processus gourmands en mémoire sur votre instance Linux EC2, exécutez la commande top :
top
Exemple de sortie :
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
Pour identifier les processus qui consomment le plus de mémoire dans votre instance, exécutez la commande suivante :
ps aux --sort=-%mem | head -n 5
Exemple de sortie :
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
Une activité d’échange élevée peut considérablement ralentir votre système. Pour plus d'informations, consultez la section Activer le volume d'échange du stockage d'instances pour les instances EC2 M1 et C1.
Pour vérifier l'activité d’échange, exécutez la commande suivante :
vmstat 1 5
Exemple de sortie :
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
Résoudre votre problème en fonction de vos habitudes d'utilisation de la mémoire
Votre instance présente un taux élevé d'utilisation des échanges
Procédez comme suit :
-
Pour réduire la fréquence d’utilisation de l’espace d’échange, exécutez la commande suivante :
sudo sysctl vm.swappiness=10 -
Pour effacer la mémoire swap, exécutez la commande suivante :
# 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 -aImportant : Si la mémoire physique de l'instance n'est pas suffisante pour la commande swap, vous pouvez recevoir des erreurs de mémoire insuffisante (OOM).
-
Si votre instance a besoin d'espace supplémentaire, exécutez la commande suivante :
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
Il existe des problèmes de mémoire à l'échelle du système
Procédez comme suit :
-
Pour vérifier la présence d'erreurs OOM, exécutez les commandes suivantes :
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 -
Pour surveiller l'utilisation de la mémoire pour votre instance, exécutez la commande suivante :
watch -n 1 free -m -
Pour vérifier les pages de mémoire disponibles, exécutez la commande suivante :
cat /proc/buddyinfo
Pour plus d’informations, consultez la section Types d'instances EC2 d'Amazon.
Il existe des fuites de mémoire dans vos applications Java
Procédez comme suit :
- Pour ajuster la taille du tas, exécutez la commande suivante :
Remarque : Remplacez 2g et 4g par les tailles de tas minimale et maximale pour votre application.java -Xms2g -Xmx4g -jar application.jar - Pour activer la journalisation du récupérateur de mémoire (GC), exécutez la commande suivante :
Remarque : Remplacez gc.log par le nom et le chemin de votre fichier journal.java -Xlog:gc*=debug:file=gc.log -jar application.jar - Pour utiliser le récupérateur de mémoire G1 afin de mieux gérer la mémoire de votre instance, exécutez la commande suivante :
Remarque : Remplacez -XX:+UseG1GC par votre algorithme de récupérateur de mémoire préféré.java -XX:+UseG1GC -jar application.jar
Il y a des problèmes avec vos serveurs de base de données
Procédez comme suit :
-
Pour surveiller les processus spécifiques du serveur de base de données, exécutez la commande suivante :
ps -eo pid,ppid,cmd,%mem,%cpu,rss,vsz | grep mysql -
Pour vérifier l'utilisation du pool de mémoires tampons InnoDB, exécutez la commande suivante :
mysql -e "SHOW ENGINE INNODB STATUS\G" | grep "Buffer pool" -
Pour analyser l'utilisation de la mémoire pour chaque connexion, exécutez la commande suivante :
mysql -e "SHOW VARIABLES LIKE '%buffer%';"
Pour plus d'informations sur l'optimisation des performances des serveurs de base de données, consultez la section Bonnes pratiques d’utilisation de MySQL.
Informations connexes
Collecter des métriques, des journaux et des suivis avec l'agent CloudWatch
- Sujets
- Compute
- Balises
- Amazon EC2Linux
- Langue
- Français

Contenus pertinents
demandé il y a 3 ans
- Réponse acceptée
demandé il y a 2 ans
demandé il y a 3 ans
demandé il y a 3 ans
demandé il y a un an
AWS OFFICIELA mis à jour il y a 2 ans