2009-01-28 14 views
9

Tengo un pequeño servidor VPS que tiene una interfaz Nginx que sirve archivos multimedia estáticos y pasa las solicitudes Django a un servidor MPM prefork Apache 2.2 ejecutando mod_wsgi.Implementación de Django: Corte de la parte superior de Apache

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

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

Considerando 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 utiliza Apache.

Respuesta

8

Si desea seguir con Apache, algunas sugerencias, más o menos en orden de dificultad:

  • utilice el MPM trabajador en lugar de Apache 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 here (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 simultáneos que necesita para poder atender.
  • cambie a mod_wsgi (en modo daemon) en lugar de mod_python.
+0

Gracias por la respuesta. Ya estoy usando MPM y mod_wsgi. ¿Sabes dónde hay una buena guía para configurar Apache en términos de las configuraciones StartServers, MaxClients, MinSpareThreads y MaxSpareThreads? Actualmente están configurados en los valores predeterminados. –

+0

No tiene una buena guía de mano, pero solo busque esas instrucciones en los documentos de Apache, son bastante lógicas. Por lo general, los desgloso de los valores predeterminados en proporción, principalmente en función de establecer MaxClients en la cantidad de conexiones simultáneas que creo que tendré que atender. –

3

Puede considerar el uso de Spawning para la implementación.

+0

Parece interesante. Aunque tengo una pregunta: ¿tendrías que volver a ejecutar el comando spawn para cada sitio, si el servidor alguna vez se reinicia? –

+0

@Ty: Creo que pondrías el desove en un guión de inicio, en el mismo lugar donde está ahora apache. – nosklo

+0

Intenté cambiar una aplicación Django de Apache + mod_wsgi a Spawning en mi alojamiento compartido en Webfaction.Tal vez configuré incorrectamente el engendro o malinterpreté los resultados, pero parecía que el engendro consumía más memoria que Apache en la misma aplicación. – Headcrab

2

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

6

Para el registro, el uso de OP del término MPM no es sensible. 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. En el contexto de mod_wsgi sin embargo, usted puede ser mejor de la lectura:

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

En resumen, aunque:

  • prefork MPM es un proceso multi/solo subproceso.
  • trabajador MPM es multi proceso/multi roscado.
  • winnt MPM en proceso único/multi roscado.
+0

Mi pregunta se ha actualizado con el tipo de MPM que estaba usando en ese momento. –

Cuestiones relacionadas