2011-02-11 13 views
6

Estoy ejecutando una instancia de Redmine con Passenger y Nginx. Con solo un puñado de problemas en la base de datos, Redmine consume más de 80mb de RAM.Reducción del uso de memoria de Redmine - Fruta colgante baja

¿Alguien puede compartir consejos para reducir el uso de memoria de Redmine? La instancia de Redmine es utilizada por 3 personas y estoy dispuesto a sacrificar velocidad.

+0

No es una solución, pero, si no está utilizando REE (y usando ruby ​​1.8.7) pruébelo, para mis aplicaciones es 30% de descuento de memoria. – andrea

Respuesta

3

No hay frutas realmente colgantes. Y si los hubiera, ya los habríamos incluido y activado por defecto.

80 MB RSS (a diferencia del tamaño virtual que puede ser mucho más) es bastante bueno. En operación normal, usará entre 70 y 120 MB de RSS por proceso (dependiendo del modelo de implementación, muy pocos en el pasajero).

Como se sugirió en andrea, puede reducir el espacio total de la memoria en aproximadamente un tercio cuando utiliza REE (Ruby Enterprise Edition, que también es gratuito). Pero este ahorro solo se puede lograr cuando ejecuta más de un proceso (cada uno requiere la memoria anterior). REE logra este ahorro optimizando Ruby para una técnica llamada Copy on Write, de modo que los procesos de aplicación adicionales toman menos memoria.

Lo siento, su (hipotético) servidor de 128 MB probablemente no sea suficiente. Para una instalación pequeña, es posible que pueda exprimir una instalación mínima en 256 MB, pero solo comienza a ser todo menos un dolor de cabeza en 512 MB (incluida la base de datos).

Eso se debe a cómo funcionan las aplicaciones Rails en contraste con cosas como PHP. Requieren una instancia del servidor de aplicaciones en ejecución. Esa instancia suele ser capaz de responder una solicitud a la vez, utilizando aproximadamente la misma cantidad de memoria todo el tiempo. Por lo tanto, el consumo de memoria es aproximadamente equivalente al número de procesos de aplicación que ejecuta, independientemente de la carga real. Pero si sintoniza su sistema correctamente, puede obtener un gran número de preguntas/respuestas en un solo proceso.

+0

De acuerdo, entiendo eso. Ya estoy usando REE. Hasta ahora, 160 MB (en un plan de WebFaction) ha sido lo suficientemente bueno para Redmine y para el pequeño proyecto de Django para el que estamos usando Redmine. Eso probablemente cambiará cuando la aplicación Django entre en funcionamiento. –

+0

Para las aplicaciones de Django, puede ahorrar algo de sobrecarga evitando Django y sirviendo archivos multimedia estáticos directamente desde Apache o Nginx. ¿Tienes algún consejo como ese para Ruby? –

+0

@aantn: Como ya está usando nginx + pasajero, eso es exactamente lo que está sucediendo. Los archivos estáticos son servidos directamente por nginx y las solicitudes dinámicas se envían al pasajero para que sean respondidas por los rieles. –