2012-05-03 14 views
10

Estoy ejecutando una aplicación JRuby on Rails. Veo un montón de esto al azar en mis registros:Tamaño de la agrupación de conexiones de la aplicación Rails, evitando problemas de tamaño máximo de la agrupación

The max pool size is currently 5; consider increasing it

entiendo que puedo aumentar el tamaño de la agrupación máximo en mi configuración para abordar esta cuestión. El problema que intento abordar es comprender cuál debe ser el número óptimo. Estoy tratando de evitar problemas de contención para las conexiones. Claramente, establecer este número en algo desagradablemente grande tampoco funcionará.

¿Existe un protocolo general a seguir para conocer la configuración óptima del tamaño de la piscina de sus aplicaciones?

+0

¿En qué servidor está implementando? –

Respuesta

13

De here,

El tamaño óptimo de un grupo de subprocesos depende del número de procesadores disponibles y la naturaleza de las tareas en la cola de trabajo. En un sistema N-processor para una cola de trabajo que contendrá tareas totalmente computarizadas, generalmente logrará la máxima utilización de CPU con un grupo de subprocesos de N o N + 1 subprocesos.

Para tareas que pueden esperar que se complete la E/S, por ejemplo, una tarea que lee una solicitud HTTP desde un socket, querrá aumentar el tamaño del grupo más allá del número de procesadores disponibles, porque no todos hilos estarán trabajando en todo momento. Mediante el uso de perfiles, puede estimar la relación entre el tiempo de espera (WT) y el tiempo de servicio (ST) para una solicitud típica. Si llamamos a esta relación WT/ST, para un sistema N-processor, querrá tener aproximadamente N * (1 + WT/ST) hilos para mantener los procesadores completamente utilizados.

La utilización del procesador no es la única consideración para ajustar el tamaño del grupo de subprocesos. A medida que crece el grupo de subprocesos, puede encontrar las limitaciones del planificador, la memoria disponible u otros recursos del sistema, como el número de sockets, los identificadores de archivos abiertos o las conexiones de bases de datos.

Así perfil de su aplicación, si los hilos son en su mayoría de la CPU obligados, a continuación, establecer el tamaño de los conjuntos de subprocesos a número de núcleos, o el número de núcleos + 1. Si vas a pasar la mayor parte de su tiempo a la espera de bases de datos llama a complete, luego experimente con una cantidad bastante grande de hilos y vea cómo se desempeña la aplicación.

Cuestiones relacionadas