Pregunta

Estoy desarrollando un servicio Web restful que se ejecuta como un servlet (mediante el bloqueo de e / s) en el Embarcadero.Averiguar la configuración óptima para un máximo de subprocesos parece difícil.

Hay una investigado fórmula para determinar el número máximo de subprocesos de algunos fáciles de medir las características del resto de la instalación?

¿Fue útil?

Solución

Muy simple y primitiva:

max_number_of_threads = number_of_CPUs * C

Donde C depende de otros factores de su aplicación :-)

Pregúntese siguientes preguntas:

  • Será su aplicación de la CPU (C inferior) o pasar más tiempo esperando a que un tercio de los sistemas (superior C)?
  • ¿Necesita tiempos de respuesta más rápidos inferior (C) o ser capaz de servir a varios usuarios a la vez, incluso si cada solicitud tiene más larga (mayor C).

Por lo general el conjunto C más baja, por ejemplo,2 - 10.

Otros consejos

No no existe.Mantener el número de hilos limitado y bajo control, de modo que no exceda de los recursos del sistema, Java límite suele ser de alrededor de 100-200 vivir hilos.

Una buena manera de hacerlo es mediante el uso de los Ejecutores de java.util.concurrente.

Entiendo que en el momento en que esta pregunta se la hicieron, Servlet 3.0 no estaba.Pero pensé que debía grabar, en esta pregunta, la posibilidad de hacer Async procesamiento en el contenedor de Servlets utilizando Servlet 3.0.Esto puede ayudar a alguien que viene a través de esta pregunta.No hace falta decir, que hay suficientes recursos para Servlet 3.0 que señalar que el principal servlet hilos son ahora menos bajo presión !Y Jetty ha Async contrapartes, en caso de que uno no desea para el uso de la API de Servlet 3.0, per se.

La respuesta depende del número máximo de conexiones simultáneas que esperar a manejar.Usted debe permitir que tantos hilos como conexiones esperar.

andreasmk2 es incorrecto acerca de la cantidad de hilos.He de ejecutar aplicaciones con 1000 hilos y no tenía ningún problema con los recursos del sistema;por supuesto depende de los detalles sobre su sistema.Que debería ejecutar en un sistema de limitación, no Java la limitación.

Mi problema es que no sé cómo se forma una expectativa razonable para el número de conexiones simultáneas.Presumiblemente, en algunos el punto es mejor rechazar nuevas conexiones que dejar todo más lento, porque hay demasiado hacer las solicitudes de reparación.

Realista de las cargas de trabajo son difíciles de simular, es por eso que estoy buscando una fórmula que ya investigado por alguien más.

(La obvia límite superior es max tamaño de la pila dividido por la cantidad de memoria mínima necesaria para dar servicio a una petición, pero incluso eso es difícil de medir en un entorno con un recolector de basura.)

Gracias.He leído esto como que no había una fórmula fácil.:-(

(Mi app es un HTML5 validador.A veces es claramente de espera en servidores externos.Sin embargo, es difícil precisar cuando, en realidad, de CPU, ya sea por su propia cuenta o a través del recolector de basura.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top