25

Estoy ejecutando una aplicación Ruby on Rails en un servidor Linux virtual con un límite de 1 GB de RAM. Actualmente, estoy constantemente llegando al límite y me gustaría optimizar la utilización de la memoria. Una opción que estoy viendo es reducir el número de trabajadores de unicornio.Unicornio: ¿Qué cantidad de procesos de trabajo usar?

Entonces, ¿cuál es la mejor manera de determinar el número de trabajadores de unicornio para usar?

La configuración actual es de 10 trabajadores, pero el número máximo de solicitudes por segundo que he visto en Google Analytics Real-Time es 3 (solo se puntúa una vez en un momento punta; en el 99% de las veces no supera 1 solicitud por segundo).

Entonces, ¿es una suposición de que puedo, por ahora, ir con 4 trabajadores, dejando espacio para cantidades inesperadas de solicitudes? ¿Cuáles son las métricas que debería tener en cuenta para determinar la cantidad de trabajadores y cuáles son las herramientas que puedo usar para eso en mi máquina Ubuntu?

Respuesta

42

La cantidad de trabajadores que debe usar depende en gran medida de lo que hace su aplicación y de la forma en que hace esas cosas. Realmente no existe una fórmula perfecta para desafortunadamente que funcione en todos los casos de prueba. Esto se vuelve aún más cierto cuando se tiene en cuenta el hecho de que tiene una cantidad finita de RAM que debe mantener el servidor.

Muchos sugieren que CPU Core Count + 1 pero eso tampoco es correcto. Tendrás que hacer pruebas de casos con diferentes cantidades de trabajadores presentes y ver cómo van las cosas. Asegúrese de revisar los registros regularmente.

En nuestro equipo se utiliza un programa llamado Nagios: http://www.nagios.org

Funciona bien y puede comprobar su servidor para muchas cosas diferentes que pueden estar ocurriendo e incluso alertar a ellos. Esto puede ayudarte mucho cuando trates de encontrar el equilibrio perfecto.

Además, a veces hay cosas que su servidor está haciendo además de simplemente ejecutar sus instancias de rieles, puede que esté ejecutando scripts o procesando información que no es necesaria. Asegúrese de que su servidor no esté haciendo las cosas que no necesita, así ahorrará muchos ciclos de CPU y RAM.

Además, asegúrese de que va a implementar esta característica que unicornio tiene, lo que hacemos en nuestros proyectos y es muy valiosa:

memoria Crecimiento Cuando un trabajador está utilizando demasiada memoria, dios o monit puede enviarlo una señal de SALIR. Esto le dice al trabajador que muera después de terminar la solicitud actual. Tan pronto como el trabajador muere, el maestro teclea un nuevo que es capaz de servir solicitudes instantáneamente. De esta forma, no tiene que matar su conexión a mitad de la solicitud o tomar una penalización de inicio . - Tomado de: https://github.com/blog/517-unicorn

También encontraron esta pregunta similar que podría darle una idea:

https://serverfault.com/q/369811/110682

Yo espero que ayude.

+0

Muchas gracias por la respuesta perspicaz y el tiempo que invirtió en escribir esto. ¡Me parece muy útil! – emrass

+0

@ blackbird07 De nada, me alegra haber podido ayudarlo. Buena suerte con la optimización de la memoria. –

Cuestiones relacionadas