Apache est très facile à installer et à initialiser, mais il est livré avec de nombreux modules préinstallés et, par conséquent, vous pouvez rencontrer des problèmes de performances lors de l'exécution sur un VPS à faible RAM.
Ainsi, il n'est pas toujours nécessaire d'avoir un serveur plus grand, mais vous pouvez simplement configurer les paramètres Apache de la bonne manière et avoir les meilleures performances possibles. Voici quelques mesures à prendre pour y parvenir.
Ce tutoriel est pour Ubuntu 14.04 LTS mais les principes sont également similaires aux versions précédentes.
1. Désactivez les modules Apache
Vous pouvez voir une liste de tous les modules installés avec la commande ls /etc/apache2/mods-available/
et de tous les modules actuellement actifs ls /etc/apache2/mods-enabled/
.
Lors de l'installation initiale d'Apache, 15 modules ou plus sont activés par défaut. Ce sont trop et la plupart d'entre eux ne sont pas nécessaires.
Tout d'abord, vous devez faire une liste de tous les modules actuellement actifs et l'enregistrer pour référence future au cas où vous désactivez quelque chose qui est nécessaire et que vous devez le réactiver. Ensuite, désactivez simplement les modules un par un avec la commande (en utilisant moduleName comme exemple):
sudo a2dismod moduleName
... et redémarrez Apache après chaque modification pour voir si une erreur se produit.
Certains modules que vous devez désactiver si vous n'en avez pas besoin sont:
- PHP
- SSL
- Récrire
- Perl
- Python
Après avoir désactivé un module et rechargé la configuration Apache, vous pouvez vérifier les erreurs en ouvrant le journal des erreurs Apache avec un éditeur de texte comme nano.
sudo nano /var/log/apache2/error.log
Si vous obtenez une erreur, réactivez simplement le module correspondant avec:
sudo a2enmod moduleName
Ensuite, redémarrez Apache jusqu'à ce que la liste minimale soit triée!
2. Configurez mpm_prefork
Avec la configuration Apache par défaut (qui n'est pas bien équilibrée pour les petits serveurs), la mémoire peut être épuisée rapidement et votre serveur cloud peut devenir surchargé. Cela entraînera le blocage de la page Web dans un état de chargement constant. Il est probable que le serveur maintienne ces processus Apache morts actifs, essayant de servir le contenu inutilement, réduisant le nombre de processus disponibles pour servir.
Pour résoudre ce problème, vous devez d'abord déterminer la quantité de RAM dont votre serveur a besoin en dehors d'Apache et la quantité moyenne de mémoire utilisée par les processus Apache.
Pendant l'exécution d'Apache, ouvrez la commande supérieure sur le serveur.
top -bn 1
Sur le tableau des résultats:
- ajoutez les nombres dans la colonne RES pour chaque processus, sauf apache2 , puis supprimez-le de la quantité totale de RAM. Disons que vous obtenez 600 MB .
- obtenir la moyenne de tous les processus apache2 . Disons obtenir 20 MB .
- ensuite, il suffit de faire la division 600/20 = 30 processus Apache maximum
Étape suivante, modifiez le fichier de configuration du module mpm_prefork:
sudo nano /etc/apache2/mods-enabled/mpm_prefork.conf
Cela peut ressembler à ceci:
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers 30
MaxConnectionsPerChild 0
</IfModule>
Où:
- StartServers: nombre de processus serveur à démarrer.
- MinSpareServers: nombre minimum de processus serveur qui sont conservés en réserve.
- MaxSpareServers: nombre maximum de processus serveur qui sont conservés en réserve.
- MaxRequestWorkers: nombre maximal de processus serveur autorisés à démarrer.
- MaxConnectionsPerChild: nombre maximal de demandes servies par un processus serveur.
Dans le paramètre MaxRequestWorkers , vous devez le remplacer par ce que vous avez trouvé dans la division ci-dessus.
Maintenant, si votre VPS est surchargé et atteint le nombre maximum de clients qu'il peut servir à la fois, il servira ceux-ci et les autres utilisateurs auront simplement un échec rapide. Ils peuvent ensuite recharger la page pour réessayer. Il est préférable de fermer rapidement ces connexions, mais de laisser le serveur dans un état sain plutôt que de rester ouvert pour toujours.
3. Réduisez vos journaux
Pour maximiser les performances, vous pouvez certainement enregistrer moins d'informations. Dans la configuration Apache par défaut, le paramètre LogLevel est défini sur warn . Vous pouvez changer cela en erreur pour ne conserver que les messages d'erreur.
Ouvrez le fichier de configuration Apache:
sudo nano /etc/apache2/apache2.conf
Trouvez la ligne:
LogLevel warn
... et changez-le en:
LogLevel error
Ensuite, enregistrez le fichier et redémarrez Apache avec:
sudo service apache2 restart
Le fichier par défaut qu'Apache conserve les journaux est /var/log/apache2/error.log .
4. Envisagez de remplacer mod_php
Si vous exécutez un site PHP, il y a de grandes chances que vous utilisiez le module mod_php. Ce module peut faire en sorte que chaque processus enfant Apache utilise plus de 100 Mo de RAM même si les demandes concernent des ressources statiques telles que des images, css et javascript.
Une excellente alternative est le module php-fpm , qui est un processus distinct qui utilise le protocole fastcgi. Avec php-fpm, la mémoire des processus Apache peut chuter à 10 Mo pour le contenu statique et 60 Mo pour le dynamique.
Bien qu'il puisse être un peu difficile de faire fonctionner les choses avec ce changement, cela en vaut la peine.
5. Envisagez de remplacer mpm_prefork
La plupart des configurations Apache utilisent le module mpm_prefork qui est thread-safe et utilise plusieurs processus enfants avec un thread chacun et chaque processus gère une connexion à la fois. Si vous n'avez pas besoin de modules externes tels que PHP ou Rails, vous pouvez le remplacer par le module apache2-mpm-worker , qui est souvent plus rapide. Worker MPM utilise plusieurs processus enfants avec de nombreux threads chacun et chaque thread gère une connexion à la fois.
Pour activer le module de travail, vous devez l'installer.
sudo apt-get install apache2-mpm-worker
Cette commande désinstalle mpm_prefork , mos_php et d'autres modules complémentaires incompatibles.