Estamos ejecutando una aplicación web Ruby on Rails bajo Unicorn. Nuestra aplicación no está estrictamente vinculada a la CPU (tenemos un sistema Xeon E5645 dual con 12 núcleos y un valor promedio de carga máxima es de alrededor de 6). Comenzamos con 40 trabajadores de Unicornio inicialmente, pero la huella de memoria de la aplicación aumentó con el tiempo. Entonces, ahora tenemos que reducir el número de procesos de trabajo. Pensé que la fórmula estándar (número de núcleos de CPU + 1) también se aplica a Unicorn, pero mi colega intentó convencerme de que deberíamos reservar más instancias de Unicorn por CPU y proporcionó este enlace . Sin embargo, no estoy exactamente seguro de por qué necesitamos gastar tanta memoria en los procesos inactivos de Unicorn.
Mi pregunta es: ¿cuál es la razón para tener más de una instancia de Unicorn por núcleo de CPU? ¿Se debe a alguna peculiaridad arquitectónica de Unicornio? Soy consciente de que los procesos de Unicorn ocupados no pueden aceptar nuevas conexiones (estamos usando sockets de dominio UNIX para comunicarnos con instancias de Unicorn BTW), pero pensé que el backlog se introdujo exactamente para abordar esto. ¿Es posible superar estas 2 a 8 instancias de Unicornio por regla de CPU de todos modos?