Question

J'ai un petit serveur VPS qui a un serveur Nginx qui sert des fichiers multimédias statiques et transmet les demandes Django à un serveur MPM préformé Apache 2.2 exécutant mod_wsgi.

Avec un (très) petit site chargé et fonctionnel, il utilise actuellement 143 Mo de 256 Mo de RAM.

À l'aide de la commande top, je peux voir qu'Apache utilise 52,9% de la RAM disponible, avec memcache en seconde avec 2,1%.

Étant donné que je prévois de placer plusieurs projets Django sur ce serveur, je me demande si je peux faire quelque chose pour réduire la quantité de mémoire RAM utilisée par Apache.

Était-ce utile?

La solution

Si vous souhaitez vous en tenir à Apache, voici quelques suggestions, classées par ordre de difficulté:

  • utilisez le MPM worker d'Apache au lieu de prefork. La mémoire réelle utilisée par connexion client sera inférieure, mais sachez que la mémoire virtuelle allouée pour Apache sous Linux peut sembler très élevée, en raison des 8 Mo alloués par Linux pour la pile de chaque thread. En réalité, cela n’a pas d’importance, à moins que votre VPS soit un cerveau mort et qu’il bloque la mémoire virtuelle plutôt que la mémoire réelle RSS (taille du jeu résident). Dans ce cas, vous pouvez apprendre à réduire la taille de la pile de threads ici (sous section VPS avec contrainte de mémoire).
  • éditez votre fichier de configuration Apache et réduisez les paramètres de StartServers, MaxClients, MinSpareThreads et MaxSpareThreads à peu près proportionnellement. Les niveaux appropriés correspondent à un équilibre entre l’utilisation de mémoire souhaitée et le nombre de clients simultanés que vous devez pouvoir servir.
  • passez à mod_wsgi (en mode démon) au lieu de mod_python.

Autres conseils

Pour mémoire, l'utilisation du terme MPM par le PO 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 quel MPM vous utilisez. Sous UNIX, les deux principaux MPM ou modules de multitraitement sont prefork et worker. Sous Windows, le winnt MPM est toujours utilisé. Des informations détaillées sur les différents MPM sont disponibles dans la documentation Apache du site Web Apache. Dans le contexte de mod_wsgi cependant, vous feriez mieux de lire:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

En bref, cependant:

  • prefork MPM est multiprocessus / à thread unique.
  • MPM travailleur est multiprocessus / multithread.
  • MPM winnt en processus unique / multi-threadés.

Vous pouvez envisager d’utiliser Générer pour le déploiement.

vous pouvez exécuter Django sur FastCGI. nginx pourrait alors le conduire directement au lieu de passer par Apache.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top