J'ai un serveur VPS de 1 Go sous 12.0.4 Ubuntu. Tout fonctionne très bien, la plupart du temps, mon utilisation de RAM indique environ 700 Mo. Cependant, toutes les semaines environ, le serveur manque de mémoire et se bloque. Il récupère et démarre tous les services sauf Mysql.
J'ai constaté que je n'avais pas de mémoire d'échange. Je crée donc un fichier d'échange de 256 Mo et le configure. Cela fonctionne bien, mais plantage toujours cette fois après 2 semaines.
Je ne suis pas un expert comme vous l'avez déjà compris. Je voudrais donc savoir pourquoi, en fonctionnement normal, mon serveur utilise autant de mémoire. Je veux dire que je l'observe à différentes heures, il se situe toujours autour de 700-800 Mo et la charge est stable. il n'y a pas de cron qui fonctionne la nuit ou quelque chose comme ça. J'ai quelques wordpress blog
, mais ils ont une charge stable et ne voient jamais de charge "en vrac".
J'ai le panneau de configuration de Vesta, et tous les rapports que je connais sont normaux. Ce que je remarque toutefois, c’est qu’Apache affiche toujours 1900 Mo de consommation de mémoire alors que mon système dispose au total de moins de mémoire. J'ai installé le serveur Web inversé nginx [je ne sais pas ce que cela veut dire par Vesta l'a fait pour moi]. Tout le reste est bon, juste Apache est tout le temps à 1900MB. et il semble que lorsque cette utilisation augmente, le serveur est bloqué.
Alors, y a-t-il un moyen de réduire l'utilisation d'Apache? Quelles autres mesures dois-je prendre pour rendre mon serveur stable avec la charge actuelle?.
MODIFIER:
Sur suggestion, voici ma configuration MPM
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
et voici mon Apache2ctl -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
prefork.c
http_core.c
mod_so.c
Bien que je le mentionne auparavant, mais j'exécute des blogs basés sur Wordpress (PHP), il existe également Redmine
(Ruby on Rail) qui fonctionne également à l'aide de Nginx et Apache de la même manière que les autres sites Web. . Non, je n'utilise pas de python.
Avec Apache prefork MPM configuré avec un ServerLimit
sur 256, vous l'avez configuré pour une utilisation mémoire maximale d'environ 256 processus, soit environ 15 à 30 Mo chacun. Module PHP5 Apache. Faites le calcul et vous savez qu'il va exploser sur un petit serveur avec un grand nombre de clients.
Au lieu de cela, configurez-le avec des limites beaucoup plus strictes. Par exemple.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 25
MaxClients 20
MaxRequestsPerChild 4000
</IfModule>
Redémarrez Apache pour utiliser la nouvelle configuration MPM.
Apache démarrera alors avec 5 processus, garantira la libération de 5 processus pour les nouveaux clients entrants, ne fermera les processus que si plus de 10 sont inutilisés et une limite stricte de 25. Adaptez-vous à vos besoins.
Vous pouvez également envisager d'utiliser PHP-FPM plutôt que PHP en tant que module Apache. C'est beaucoup plus efficace et aussi la configuration par défaut pour Ubuntu 14.04. Veuillez noter que vous aurez un pool de processus PHP séparé et que vous n'utiliserez pas le MPM d'Apache prefork alors (et l'exact raison pour laquelle il est plus efficace).
Il suffit de lire dans la documentation habituelle Ubuntu/Apache/PHP-FPM comment configurer tout cela.
Avoir mysql et Apache sur un serveur est une VRAIE mauvaise idée. Plus vous avez d’utilisateurs, plus vous avez accès à la base de données, qui utilise également cpu et mem pour travailler, bien sûr. Donc, vous dites à Apache d'interroger et d'interroger, les utilisateurs s'impatientent, rechargent les pages peut-être, encore plus de requêtes. Vous savez où je vais droit? Dans votre cas, ce n’est pas seulement apaxhe mais mysql qui doit utiliser les mêmes ressources clairsemées.
Je vous dis quoi, n'utilisez pas un Apache (canon) pour tuer un oiseau (80 utilisateurs). Go nginx (-npm), plus léger, ne consomme pas autant de ressources.
La plupart des gens ne comprennent pas qu'Apache CLAIM utilise les ressources pour une connexion POSSIBLE (d'où le conseil pour l'abaisser)
Ce programme est écrit pour servir des pages à tout moment. Donc, il faudra les ressources (même s’il n’ya pas de connexions, montrer) pour les garder en vie. Désolé, je ne parle pas anglais, donc j'espère pouvoir l'expliquer d'une manière que vous comprenez. La version courte 80 utilisateur et Apache ne correspondent pas sur un petit vhost! Utilisez nginx, cela devrait résoudre votre problème, sinon déplacez la base de données vers un autre petit serveur.