start run rails pumactl ruby-on-rails performance optimization memory-management unicorn

ruby-on-rails - run - ruby on rails puma server



Unicornio: ¿Qué cantidad de procesos de trabajo usar? (1)

Estoy ejecutando una aplicación Ruby on Rails en un servidor virtual Linux 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.

Entonces, ¿cuál es la mejor manera de determinar la cantidad de trabajadores de unicornio que debe 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 puntuaron una vez en un momento punta, en el 99% de las veces no superaron 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?


La cantidad de trabajadores que debe usar depende en gran medida de lo que esté haciendo 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 usamos un programa llamado Nagios: http://www.nagios.org

Funciona bien y puede revisar su servidor para detectar diferentes cosas que pueden estar sucediendo e incluso alertarlo sobre ellas. 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 estar implementando esta característica que Unicorn tiene, lo hacemos en nuestros proyectos y es invaluable:

Crecimiento de la memoria Cuando un trabajador usa demasiada memoria, dios o monit pueden enviarle 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 crea uno nuevo que puede atender las solicitudes instantáneamente. De esta forma, no es necesario que elimines tu conexión a mitad de la solicitud o recibas una penalización de inicio. - Tomado de: https://github.com/blog/517-unicorn

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

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

Espero que eso ayude.