Passer au contenu

Pourquoi mon instance Amazon EC2 Linux ne répond-elle plus ?

Lecture de 9 minute(s)
0

Mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2) ne répond plus.

Brève description

Les instances EC2 ne répondent plus pour les raisons suivantes :

  • L'utilisation du processeur est constamment égale ou proche de 100 % et ne permet pas au noyau d'effectuer les opérations types du système d'exploitation (OS).
  • L'instance étant à court de mémoire, le gestionnaire Linux Out of Memory (OOM) a mis fin à des processus tels que la base de données, le serveur Web ou le service SSH.
    Remarque : Les instances EC2 n'allouent pas d'espace d’échange (swap) par défaut.
  • Le périphérique racine est plein à 100 % et ne permet pas à d'autres processus de se terminer ou de démarrer, et le message d'erreur « No space left on device » s’affiche.
  • Votre instance ne peut pas communiquer avec d'autres hôtes en raison de problèmes réseau.
  • Les problèmes de fonctionnement des E/S bloquent les instructions de lecture et d'écriture, telles que la création de fichiers temporaires, les lectures à partir de bibliothèques système ou de bases de données.

Les numéros précédents peuvent également s'accumuler. Par exemple, si vous manquez de mémoire, le gestionnaire OOM met fin à un processus clé. Ensuite, un processus qui repose sur le processus interrompu démarre un plus grand nombre de cycles de processeur. Si le processus est lié au disque, le cycle peut également utiliser tout l'espace de stockage du volume Amazon Elastic Block Store (Amazon EBS) disponible. Le problème peut également être transféré à une instance qui attend une communication de la part de l'instance qui ne répond plus.

Pour résoudre le problème d’instance qui ne répond plus, identifiez la cause racine du problème, puis prenez des mesures de dépannage en fonction de ce problème.

Résolution

Identifier la cause racine du problème

Surveiller l'utilisation du processeur avec CloudWatch

Utilisez l'agent Amazon CloudWatch pour suivre les tendances relatives à l'utilisation de votre processeur et déterminer si le problème est persistant, spontané ou récurrent.

Utiliser des outils de surveillance du système

Si vous utilisez plusieurs services, vous devez identifier le service qui surutilise les ressources. Utilisez des outils tels que sar ou atop et atopsar pour obtenir des statistiques d'utilisation historiques concernant les processus qui s'exécutent sur votre instance. Pour plus d'informations sur la configuration des outils, consultez la section Comment configurer les outils de surveillance ATOP et de surveillance SAR pour mon instance EC2 qui exécute Amazon Linux, Red Hat Enterprise Linux (RHEL), CentOS ou Ubuntu ?

Vérifier les journaux système

Consultez les journaux de votre système pour détecter les erreurs liées à une utilisation élevée des ressources afin d'identifier les problèmes liés au système ou à l'application.

Exécutez la commande suivante pour afficher les messages du noyau :

dmesg

Vérifiez également les fichiers /var/log/syslog ou /var/log/messages pour les messages système.

Consulter l’historique de commandes

Consultez le fichier ~/.bash_history pour obtenir un historique des commandes permettant d'identifier des problèmes tels qu'un script inattendu qui s'exécute en arrière-plan.

Vérifier si l’utilisation de la mémoire est élevée

Exécutez la commande suivante pour vérifier l'utilisation de la mémoire :

free -h

Dans la sortie, vérifiez les colonnes utilisées et libres pour identifier l'utilisation de la mémoire de votre instance. Pour plus d'informations sur la commande free, consultez la page Dissection de la commande free : Ce que l'administrateur système Linux doit savoir sur le site Web de Red Hat.

Vérifier si l'utilisation de l'espace de stockage est élevée

Si l'utilisation du stockage de votre volume racine est élevée, il est possible que votre appareil soit plein. Pour identifier ce problème, consultez les journaux de la console de l'instance.

Résoudre les problèmes liés à l'utilisation élevée du processeur

Identifier le processus qui utilise un processeur élevé

Utilisez la commande pidstat ou ps pour obtenir des informations plus détaillées sur les processus, par exemple s'il s'agit d'un processus système ou d'un processus utilisateur. Pour plus d'informations sur les commandes, consultez les pages pidstat et ps sur la page de manuel Linux.

Vérifier les tâches planifiées

Vérifiez si les tâches planifiées ou les tâches cron exécutées sur l'instance ont entraîné une utilisation élevée du processeur. Tout d'abord, vérifiez les métriques CloudWatch de votre instance afin d'identifier l'horodatage du moment où l'utilisation du processeur (CPUUtilization) était élevée.

Exécutez ensuite la commande suivante pour répertorier les tâches cron :

sudo crontab -lsudo cat /etc/crontab
sudo cat crontab -l

Remarque : La commande précédente vérifie la configuration crontab pour l’utilisateur racine. Pour rechercher un utilisateur spécifique, ajoutez -u username à la commande, puis remplacez username par le nom d'utilisateur de l'utilisateur.

Dans la sortie de commande, vérifiez les tâches qui s'exécutaient au moment où l'utilisation du processeur était élevée.

Vérifiez les journaux suivants :

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

Utilisez la commande grep pour filtrer les entrées dans les journaux pour des tâches cron spécifiques et vérifier l’existence d’erreurs. Pour plus d'informations sur la commande, consultez la page grep sur le site Web du manuel Linux.

Vérifier le trafic réseau

Un trafic réseau élevé peut entraîner une utilisation élevée du processeur, en particulier si l'instance gère un volume important de requêtes réseau.

Exécutez la commande suivante pour surveiller le trafic réseau :

iftop

Utilisez la sortie de commande pour identifier les opportunités d'optimisation de la configuration de votre réseau. Assurez-vous que votre configuration ne limite pas le trafic réseau et que celui-ci se situe dans la bande passante appropriée pour votre type d'instance. Pour plus d'informations, consultez la page Analyse de l'interface Linux à la demande avec iftop sur le site Web de Red Hat. Si le trafic réseau est constamment élevé, il est recommandé de mettre à niveau votre type d'instance vers une taille plus importante.

Vérifier les E/S de disque

Un niveau élevé d’E/S de disque peut entraîner une utilisation élevée du processeur. Pour identifier les processus à l'origine d'un niveau d'E/S élevé, exécutez la commande suivante :

iostat

Pour en savoir plus, consultez la page Rapports d’E/S à partir de la ligne de commande Linux sur le site Web de Red Hat.

Pour mettre fin à un processus dont vous n'avez pas besoin, exécutez la commande kill. Pour plus d'informations, consultez la page kill sur le site Web du manuel Linux.

Pour résoudre les problèmes liés à l'utilisation élevée du processeur, consultez la section Comment résoudre les problèmes liés à l'utilisation élevée du processeur sur une instance Linux Amazon EC2 ?

Résoudre les problèmes d'utilisation élevée de la mémoire

Pour résoudre les problèmes d'utilisation élevée de la mémoire, consultez la section Comment résoudre les problèmes d'utilisation élevée de la mémoire sur mon instance Linux EC2 ?

Résoudre les problèmes liés à l'absence d'espace sur l'appareil

Pour résoudre les problèmes liés à l'utilisation élevée de périphériques racine, utilisez l’EC2 Serial Console pour vous connecter à votre instance et supprimer les fichiers inutiles. Vous pouvez utiliser l’EC2 Serial Console pour les instances créées sur AWS Nitro System et les instances de matériel nu prises en charge. Lorsque vous utilisez l'EC2 Serial Console, vous n'avez pas besoin d'une connexion fonctionnelle pour vous connecter à votre instance. Cependant, vous devez respecter les prérequis pour l’EC2 Serial Console.

Si votre instance est inaccessible et que vous n'avez pas encore configuré l'accès à la console série, vous ne pouvez pas utiliser l’EC2 Serial Console. Dans ce scénario, utilisez SSH pour vous connecter à votre instance, puis augmentez la taille du volume Amazon EBS.

Si vous ne pouvez pas utiliser la console série ou SSH, lancez une instance de secours et utilisez-la pour supprimer les fichiers inutiles. Pour obtenir des instructions, consultez la section Résoudre l'erreur « No space left on device » de la rubrique Comment résoudre un problème lié à une instance Linux EC2 qui échoue à une vérification de statut en raison d'une utilisation excessive des ressources ?

Optimiser votre code

Si votre application engendre une utilisation élevée du processeur, identifiez et éliminez les goulots d'étranglement liés aux performances de votre code. Utilisez des outils tels que perf ou strace pour identifier les problèmes de code. Pour obtenir des instructions, consultez les pages Enregistrement et analyse des profils de performances avec perf et Comment utiliser strace pour suivre les appels système effectués par une commande ? sur le site Web de Red Hat.

Mettre à niveau votre instance

Si vos processus utilisent régulièrement un volume important de ressources pour des raisons valables, telles qu'un nombre élevé d'utilisateurs, augmentez la taille de votre instance. Pour plus d'informations sur les exigences, consultez la section Quelles étapes dois-je suivre avant de modifier le type d'instance de mon instance Linux EC2 ?

Utilisez l’optimiseur de calcul AWS pour identifier le type et la taille d'instance appropriés à vos exigences de configuration. Vous pouvez également utiliser Amazon EC2 Auto Scaling pour effectuer une mise à l'échelle horizontale.

Configurer des règles d’audit Linux

Pour une plus grande visibilité des commandes utilisateur et des modifications de configuration, configurez le système d'audit Linux pour suivre les modifications.

Mettre à jour votre configuration pour éviter toute utilisation excessive des ressources à l'avenir

Avant de déployer une nouvelle application en production, créez un environnement de test. Utilisez l'environnement pour évaluer l'application et déterminer le calcul, la mémoire, la capacité de volume EBS et le trafic réseau requis. Puis, déployez votre application en fonction des exigences de référence. Pour connaître les bonnes pratiques permettant de renforcer la tolérance aux pannes, consultez la section Concevoir des interactions dans un système distribué afin de prévenir les échecs.

Vérifiez les performances élevées des fichiers de configuration, des requêtes de base de données et du code qui s'exécutent sur votre instance. Si votre application est gourmande en bases de données, il est recommandé d'utiliser la mise en cache pour réduire le nombre de requêtes adressées à la base de données.

Assurez-vous que votre logiciel est à jour avec les derniers correctifs de sécurité et corrections de bogues. Un logiciel obsolète peut engendrer des problèmes de performances qui entraînent une utilisation élevée du processeur.

Si votre application reçoit un volume de trafic élevé, utilisez un équilibreur de charge pour répartir le trafic entre plusieurs instances EC2. Un équilibreur de charge réduit l'utilisation du processeur sur les instances individuelles.

Surveillez en permanence l'utilisation des ressources de vos instances. Créez des alarmes CloudWatch pour identifier automatiquement les instances présentant un risque de surutilisation des ressources.

AWS OFFICIELA mis à jour il y a 7 mois