Le déploiement de Django: réduire les frais généraux D'Apache
j'ai un petit serveur VPS qui a une face avant Nginx qui sert des fichiers média statiques et passe des requêtes Django à un serveur MPM Apache 2.2 prefork qui exécute mod_wsgi.
avec un (très) petit site chargé et fonctionnel, il utilise actuellement 143MO de 256Mo de mémoire vive.
en utilisant la commande top
, je peux voir Qu'Apache utilise 52.9% de la RAM disponible, avec memcache en seconde position en utilisant 2.1%.
considérant que je prévois de mettre plusieurs projets Django sur ce seul serveur, je me demande s'il n'y a rien que je puisse faire pour réduire la quantité de RAM qu'Apache utilise?
4 réponses
si vous voulez rester avec Apache, quelques suggestions, à peu près par ordre de difficulté:
- utilisez le MPM Apache worker au lieu de prefork. La mémoire réelle utilisée par connexion client sera plus faible, mais sachez que la mémoire virtuelle attribuée à Apache sur Linux peut sembler très élevée, en raison des allocats Linux de 8 Mo pour chaque pile de thread. Cela n'a pas vraiment d'importance, à moins que votre VPS soit mort-cerveau et capte la mémoire virtuelle plutôt que RSS réel (résidente de la taille de la mémoire. Dans ce cas, vous pouvez apprendre comment abaisser la taille de la pile de threads ici (sous la section VPS à contrainte de mémoire).
- éditez votre fichier de configuration Apache et réduisez les paramètres StartServers, MaxClients, MinSpareThreads et MaxSpareThreads de façon à peu près proportionnelle. Les niveaux appropriés seront un équilibre entre votre utilisation de mémoire désirée et le nombre de clients concurrents que vous devez être en mesure de servir.
- bascule mod_wsgi (en mode démon) au lieu de mod_python.
pour mémoire, L'utilisation par L'OP du terme MPM n'est pas sensuelle. Le MPM dans Apache n'est pas une option, vous utilisez toujours un MPM lorsque vous utilisez Apache. Le choix est le MPM que vous utilisez. Sur UNIX, les deux principaux MPM ou Modules multiprocesseurs sont prefork et worker. Sur Windows, le WinNT MPM est toujours utilisé. Les détails sur les différents MPMs se trouvent dans la documentation D'Apache sur le site Web D'Apache. Dans le contexte de mod_wsgi cependant, vous pourriez être mieux de lecture:
http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
en bref:
- prefork MPM est multi-processus/thread unique.
- travailleur MPM est multi processus / multi threaded.
- winnt MPM en un seul processus / multi threaded.
vous pourriez envisager d'utiliser fraie pour le déploiement.
vous pourriez diriger Django sur FastCGI. nginx pourrait alors conduire directement au lieu de passer par Apache.