with python3 mod_wsgi how deploy and django apache deployment mod-wsgi

mod_wsgi - python3 django apache



Despliegue de Django: recortando los gastos generales de Apache (4)

Tengo un pequeño servidor VPS que tiene una interfaz de Nginx que sirve archivos multimedia estáticos y pasa las solicitudes de Django a un servidor MPM prefork Apache 2.2 que ejecuta mod_wsgi.

Con un sitio (muy) pequeño cargado y funcionando, actualmente está utilizando 143MB de 256MB de RAM.

Utilizando el comando top , puedo ver que Apache está usando el 52.9% de la RAM disponible, con Memcache en segundo lugar usando el 2.1%.

Teniendo en cuenta que estoy planeando poner bastantes proyectos de Django en este servidor, me pregunto si hay algo que pueda hacer para recortar la cantidad de RAM que está utilizando Apache.


podrías ejecutar Django en FastCGI. nginx podría conducirlo directamente en lugar de pasar por Apache.


Puede considerar usar Spawning para la implementación.


Si desea seguir con Apache, algunas sugerencias, aproximadamente en orden de dificultad:

  • utilice el MPM de Apache worker en lugar de prefork. La memoria real utilizada por conexión de cliente será menor, pero tenga en cuenta que la memoria virtual asignada para Apache en Linux puede parecer muy alta, debido a las asignaciones de Linux de 8 MB para cada pila de subprocesos. Esto realmente no importa, a menos que su VPS tenga muerte cerebral y limite la memoria virtual en lugar de la memoria real de RSS (tamaño de conjunto residente). En ese caso, puede aprender cómo reducir el tamaño de la pila de subprocesos aquí (en la sección VPS restringida a la memoria).
  • edite su archivo de configuración de Apache y reduzca las configuraciones de StartServers, MaxClients, MinSpareThreads y MaxSpareThreads aproximadamente en proporción. Los niveles adecuados serán un equilibrio entre el uso de memoria deseado y la cantidad de clientes concurrentes que necesita para poder atender.
  • cambiar a mod_wsgi (en modo daemon) en lugar de mod_python.

Para el registro, el uso de OP del término MPM no es sensorial. El MPM en Apache no es una opción, siempre está usando un MPM cuando usa Apache. La elección es qué MPM estás usando. En UNIX, los dos principales MPM o módulos de multiprocesamiento son prefork y worker. En Windows, siempre se usa winnt MPM. Los detalles sobre los diferentes MPM se pueden encontrar en la documentación de Apache en el sitio web de Apache. Sin embargo, en el contexto de mod_wsgi, es mejor que leas:

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

En resumen, sin embargo:

  • prefork MPM es multi proceso / single threaded.
  • trabajador MPM es multi process / multi threaded.
  • winnt MPM en proceso único / multi-hilo.