¿Cuál es la cantidad promedio de RAM tomada por apache2 + django + mod_wsgi?

Para un puñado de sitios de muy bajo tráfico en un VPS pequeño, tengo Django ejecutándose en uwsgi detrás de nginx y tengo un uso similar al siguiente:

  % libre -m
              total de buffers compartidos gratuitos usados ​​en caché
 Mem: 321 313 7 0 3 50
 - / + buffers / cache: 259 61
 Intercambio: 511257254

(Notará que estoy en un VPS con ~ 320 MB de RAM y un archivo de intercambio de 512 MB).

Mirando hacia top , notará que el tamaño del residente es en realidad mucho más pequeño que la asignación de memoria virtual reclamada:

  Mem: 329036k en total, 321780k usados, 7256k gratis, 3772k buffers
 Intercambio: 524280k en total, 263288k usado, 260992k gratis, 52204k en caché

   PID USUARIO PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND           
  8352 mtigas 20 0 239m 14m 2308 S 0 4.5 0: 30.82 uwsgi              
  7286 mtigas 20 0 236m 8464 1572 S 0 2.6 5: 10.82 uwsgi              
 24795 mtigas 20 0 235m 9.8m 1960 S 0 3.0 0: 36.81 uwsgi              
 20458 mtigas 20 0 234m 8248 1720 S 0 2.5 0: 37.48 uwsgi              

No es exactamente una comparación de manzanas con manzanas, pero la gran demanda de asignación de memoria virtual no necesariamente me molesta siempre que el sistema no comience a sacudirse.

Según http://stackoverflow.com/questio…, Linux asigna 8 MB para cada hilo de Apache, independientemente de si el hilo está realmente activo en este momento. Esta parte del “Sistema VPS con memoria limitada” de los documentos de mod_wsgi podría darle más configuraciones para ajustar: https://code.google.com/p/modwsg…, principalmente puede reducir el tamaño inicial de la pila de subprocesos para reducir la huella de memoria asignada de mod_wsgi.

Debería ver cómo funcionan sus aplicaciones bajo carga (y si el uso de RAM empeora). Su aplicación simplemente debe usar más y más memoria virtual preasignada a medida que avanza.

Más consejos: http://blog.webfaction.com/tips-… Los grandes en mi opinión:

  • DEBUG es falso
  • Use ServerLimit para limitar la cantidad de procesos de Apache que gira.
  • Establezca MaxRequestsPerChild en algo diferente a 0 (para que elimine y reinicie los procesos después de un cierto número de solicitudes en caso de que su aplicación tenga pérdidas de memoria)