Pourquoi mon instance Linux EC2 ne répond-elle plus en raison d’une utilisation excessive des ressources ?

Lecture de 8 minute(s)
0

Mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2) ne répond plus en raison d’une utilisation excessive des ressources. Comment puis-je éviter cela ?

Brève description

Plusieurs causes courantes peuvent expliquer qu’une instance ne réponde plus :

  • Mémoire : par défaut, aucun espace d’échange n’est alloué aux instances EC2. Le manque de mémoire appelle le gestionnaire Linux Out Of Memory (OOM). Le gestionnaire OOM met fin aux processus tels qu’une base de données, un serveur Web ou le service SSH.
  • Mise en réseau : sans mise en réseau, votre système ne peut pas répondre aux demandes ARP issues des contrôles de l’état. Lorsque cela se produit, votre instance ne parvient pas à communiquer avec les autres hôtes.
  • Opérations E/S : en l’absence d’E/S de disque, les instructions de lecture ou d’écriture restent bloquées. Cela concerne, par exemple, la création de fichiers temporaires ou la lecture à partir de bibliothèques système ou de bases de données.
  • UC : toutes les tâches précédentes nécessitent du temps UC pour fonctionner. L’utilisation de 100 % de l’UC pendant une période prolongée empêche le noyau de fonctionner normalement avec le système d’exploitation.

Ces problèmes peuvent également s’accumuler et créer un effet boule de neige. Par exemple, si vous manquez de mémoire et que le gestionnaire OOM met fin à un processus important. Suite à cela, un second processus dépendant du premier processus qui a été arrêté déclenche un nombre beaucoup plus élevé de cycles UC. Si cette tâche est liée au disque, ce cycle peut également épuiser le volume Amazon Elastic Block Store (Amazon EBS). Le problème peut également se répercuter sur une autre instance en attente de communication de la part de l’instance qui ne répond pas.

Résolution

Si votre système sollicite fortement l’UC ou qu’il lui arrive souvent de ne pas répondre en raison d’une utilisation excessive des ressources, appliquez les étapes suivantes :

Recueillir des informations

Surveiller l’utilisation de l’UC à l’aide d’Amazon CloudWatch

Utilisez un outil de surveillance tel qu’Amazon CloudWatch pour observer les tendances et les modèles d’utilisation élevée des ressources.

Utiliser des outils de surveillance du système

Si vous disposez de plusieurs services et que vous ne savez pas lequel utilise trop de ressources, installez un utilitaire tel que atop. Vous pouvez également utiliser des outils tels que htop, top et sar. Tous ces outils permettent d’identifier les processus qui sollicitent le plus l’UC. Pour en savoir plus, consultez les pages suivantes :

Obtenir davantage d’informations sur le processus qui sollicite fortement l’UC

Utilisez la commande pidstat ou ps pour obtenir des informations plus détaillées sur le processus. Les informations fournies dans la sortie de commande vous aident à déterminer s’il s’agit d’un processus système ou utilisateur. Pour en savoir plus sur la configuration et l’utilisation des outils nécessaires à l’exécution de ces commandes, consultez le contenu suivant :

  • Section pidstat(1) de la page consacrée au manuel Linux
  • Section ps(1) de la page consacrée au manuel Linux

Vérifier les journaux système

Vérifier les erreurs ou les avertissements liés à une utilisation élevée de l’UC. Par exemple, utilisez la commande dmesg pour afficher les messages du noyau et consultez les fichiers /var/log/syslog ou /var/log/messages pour connaître les messages système. Le contenu de la sortie de commande et du fichier journal permet d’identifier les erreurs du système ou de l’application qui sont à l’origine des problèmes.

Consulter l’historique de commande

Consultez l’historique de commande pour déterminer s’il y a eu une erreur humaine. L’historique de commande se trouve généralement dans le fichier ~/.bash_history.

Vérifier les tâches planifiées

Vérifiez s’il existe des tâches planifiées ou des tâches cron en cours d’exécution sur l’instance EC2 susceptibles d’entraîner une utilisation élevée du processeur. Commencez par vérifier l’horodatage de l’utilisation élevée du processeur. Exécutez ensuite la commande suivante pour répertorier les tâches cron :

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

La commande précédente répertorie la configuration crontab pour l’utilisateur root. Incluez l’option -u dans la commande pour identifier la présence d’un utilisateur spécifique sur cron. Ensuite, recherchez l’heure à laquelle vous avez noté le problème. Vérifiez vos journaux, notamment les suivants :

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

Utilisez la commande grep pour filtrer les entrées pertinentes pour les tâches cron spécifiques que vous souhaitez examiner. Vérifiez si des erreurs liées à l’un des cron identifiés se sont produites.

Vérifier l’utilisation de la mémoire

Une utilisation élevée de la mémoire peut entraîner une utilisation élevée du processeur en raison de l’utilisation de l’espace d’échange. Utilisez la commande libre pour vérifier l’utilisation de la mémoire. Pour en savoir plus sur la configuration et l’utilisation des outils nécessaires, consultez la page Dissection de la commande libre sur le site Web redhat.com.

Vérifier le trafic réseau

Un trafic réseau élevé peut entraîner une utilisation élevée de l’UC, en particulier si l’instance traite un grand nombre de demandes réseau. Utilisez la commande iftop pour surveiller le trafic réseau et envisagez d’optimiser votre configuration réseau ou de mettre à niveau votre type d’instance si nécessaire. Pour en savoir plus sur la configuration et l’utilisation des outils nécessaires, consultez la page Analytique des interfaces Linux à la demande avec iftop sur le site Web redhat.com.

Vérifier les E/S de disque

Un niveau élevé d’E/S de disque peut entraîner une utilisation élevée du processeur. Utilisez la commande iostat pour surveiller les E/S de disque et identifier les processus susceptibles d’entraîner un nombre élevé d’E/S. Pour en savoir plus, consultez la page Rapports d’E/S à partir de la ligne de commande Linux sur le site Web redhat.com.

Agir en fonction des données collectées

Optimisation du code

Si votre application entraîne une utilisation élevée de l’UC, optimisez votre code. Pour ce faire, identifiez et éliminez les obstacles qui freinent les performances. Les outils de profilage tels que perf ou strace permettent d’identifier le code problématique. Pour en savoir plus sur la configuration et l’utilisation des outils nécessaires, consultez le contenu suivant :

Mettre à niveau votre instance

Si vos processus utilisent beaucoup de ressources pour diverses raisons, telles qu’un nombre élevé d’utilisateurs, envisagez de mettre à niveau votre instance.

AWS Compute Optimizer peut vous aider à déterminer le type et la taille d’instance appropriés à utiliser. Vous pouvez également envisager une mise à l’échelle horizontale à l’aide d’Amazon EC2 Auto Scaling.

Configurer des règles d’audit Linux

Si vous souhaitez avoir davantage de visibilité sur les commandes utilisateur et les modifications de configuration, vous pouvez configurer le système d’audit Linux pour suivre les modifications.

Éviter une utilisation excessive à l’avenir

  1. Avant de déployer une nouvelle application en production, créez un environnement de test et des critères de référence pour déterminer les capacités de calcul, de mémoire, d’EBS et de réseau nécessaires. Effectuez le déploiement en fonction de vos critères de référence, tout en respectant la tolérance aux pannes. Pour en savoir plus, consultez les pages suivantes : 
    Concevoir des interactions dans un système distribué pour éviter les pannes
    Tutoriel : Configurer une application évolutive et à charge équilibrée
  2. Assurez-vous que les applications exécutées sur l’instance sont optimisées en termes de performances. L’optimisation implique d’affiner les fichiers de configuration, d’optimiser les requêtes de base de données ou d’optimiser le code.
  3. Si votre application a une utilisation intensive de la base de données, envisagez de mettre en œuvre la mise en cache pour réduire le nombre de requêtes adressées à la base de données.
  4. Assurez-vous que votre logiciel est à jour avec les derniers correctifs de sécurité et corrections de bogues. Les logiciels obsolètes peuvent causer des problèmes de performances et des vulnérabilités entraînant une utilisation élevée de l’UC.
  5. Si votre application reçoit un volume de trafic élevé, envisagez d’utiliser un équilibreur de charge pour répartir le trafic entre plusieurs instances EC2. Un équilibreur de charge réduit l’utilisation du processeur sur n’importe quelle instance.
  6. Continuez à surveiller vos instances et créez des alarmes pour certains seuils d’utilisation des ressources.
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 10 mois