Walter vous montre comment
régler l'allocation de mémoire pour un
serveur Web Apache

walter_move_ec2

Le serveur Web Apache s'exécutant sur mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2) ne répond pas par intermittence à cause de la pression mémoire sur l'instance. Comment puis-je corriger ceci ?

Deux des raisons les plus courantes liées à la pression mémoire sur une instance s'exécutant un serveur Web Apache sont les fuites de mémoire de l'application et une configuration Apache inefficace qui provoque des permutations.

Les messages de journal système tels que « oom-killer », « failure to fork process » ou autres messages relatifs à l'insuffisance de mémoire signifient généralement que la mémoire de l'instance EC2 est épuisée. 

Affichage des messages du journal système

Vous pouvez afficher les messages du journal système depuis une session de terminal ou la console Amazon EC2.

Pour afficher les messages du journal système depuis une session de terminal, établissez une session de terminal sur l'instance EC2. Vous pouvez afficher les messages du journal système pour votre instance EC2 dans un des emplacement suivants :

Distribution Linux Emplacement du journal système
Debian ou Ubuntu /var/log/syslog
CentOS ou RHEL /var/log/messages
Systèmes utilisant systemd journalctl

Pour afficher les journaux système à partir de la console, ouvrez la console Amazon EC2, puis sélectionnez l'instance EC2. À partir du menu Actions, choisissez Paramètres de l'instance, puis Obtenir le journal système.

Détection de fuites de mémoire

1.    Lancez une session de terminal sur l'instance EC2. Si vous ne pouvez pas vous connecter, essayez de redémarrer l'instance.

2.    À partir de la session de terminal, exécutez la commande top pour afficher une liste des processus associés à la mémoire dans cette instance EC2.

3.    Triez les processus de cette liste par ordre décroissant en fonction du pourcentage de mémoire utilisé. Pour effectuer le tri sur une instance RPM, appuyez sur les touches Maj+O, puis sur n. Sur les autres distributions Linux, sélectionnez l'option correspondante pour trier les processus en fonction de l'utilisation de la mémoire.

4.    Analysez la colonne de valeurs %MEM renvoyées pour les processus Apache, puis calculez la valeur moyenne.

5.    Si la valeur %MEM d'un ou de plusieurs processus Apache est anormalement élevée comparé aux autres processus Apache, la cause probable est une fuite de mémoire. Cette fuite de mémoire peut être due à une application Web exécutée sur le serveur.

6.    Ouvrez le fichier httpd.conf pour l'instance EC2 dans un éditeur, puis changer la valeur par défaut de la variable de configuration MaxConnectionsPerChild de 4000 à 1000. Notez que MaxConnectionsPerChild (Apache 2.3.9 ou version ultérieure) était appelée MaxRequestsPerChild. L'ancien nom est toujours pris en charge.

Cette modification réduit la pression mémoire sur l'instance EC2 jusqu'à ce que l'origine de la fuite de mémoire soit identifiée et résolue.

7.    À partir de la session de terminal, redémarrez le serveur Web en exécutant la commande service :

service httpd graceful

Réduction du potentiel de permutation

Vous pouvez limiter le nombre de processus générés en définissant les variables de configuration MaxRequestWorkers et ServerLimit. Notez que MaxRequestWorkers était appelée MaxClients avant Apache 2.3.13. L'ancien nom est toujours pris en charge.

Limiter le nombre de processus permettant de servir les utilisateurs empêche le serveur de permuter à cause d'un manque de RAM. La valeur limite est calculée en divisant l'utilisation moyenne typique de la mémoire d'un processus Apache dans le pourcentage total de mémoire que vous voulez allouer à Apache.

1.    Calculez une valeur limite pour les variables de configuration MaxRequestWorkers (ou MaxClients) et ServerLimit comme suit :

Si votre instance EC2 a plus de 4 Go de RAM :

Divisez la valeur %MEM moyenne des processus Apache dans 90 %. Par exemple, si la valeur %MEM moyenne s'élève à 0,8 %, divisez 90 % par 0,8 %.

0.9 / 0.008 = 112.5

Arrondissez le résultat au nombre entier le plus proche. Dans ce cas, la valeur de la limite est 112.

Si votre instance EC2 a 4 Go ou moins de RAM :

Divisez la valeur %MEM moyenne des processus Apache dans 80 %. Par exemple, si la valeur %MEM moyenne s'élève à 0,8 %, divisez 80 % par 0,8 %. Le résultat est 100.

Remarque : Le calcul de ces valeurs se base sur l'hypothèse selon laquelle l'instance est un serveur Web dédié. Si vous hébergez d'autres applications sur le serveur, soustrayez le pourcentage total de mémoire utilisée par ces dernières de 90 % ou 80 % avant de procéder au calcul. Les performances peuvent se dégrader si vous exécutez d'autres applications en plus d'Apache sur une instance dont la RAM est supérieure ou égale à 4 Go.

2.    Ouvrez le fichier httpd.conf de l'instance EC2 dans un éditeur, mettez à jour les variables de configuration MaxClients (ou MaxRequestWorkers) et ServerLimit, puis enregistrez les modifications. Par exemple :

MaxClients  112 
ServerLimit 112

3.    Redémarrez le serveur Web en exécutant la commande service à partir d'une session de terminal :

service httpd graceful

Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.

Date de publication : 07/01/2016

Date de mise à jour : 04/01/2019