2010-05-18 34 views
5

Estoy escribiendo una aplicación java que se ejecuta en Tomcat, en un hardware multi-core. La aplicación ejecuta un algoritmo y devuelve la respuesta al usuario. El problema es que incluso cuando ejecuto dos solicitudes simultáneamente, el proceso de tomcat utiliza como máximo un núcleo de CPU.
Por lo que yo entiendo, cada solicitud en Tomcat se ejecuta en subprocesos separados, y JVM debe ejecutar cada subproceso en un núcleo de CPU separado.problema de tomcat multihilo

¿Cuál podría ser el problema que limita la JVM o Tomcat para utilizar no más de un núcleo?

Gracias de antemano.

+0

¿Qué JVM estás usando? – ShiDoiSi

+0

La versión java es "1.6.0_20" – jutky

Respuesta

0

¿Está seguro de que se están creando dos hilos. Simplemente puede imprimir el nombre del hilo como una prueba rápida.

¿Qué sucede si ejecuta el algoritmo en una aplicación independiente?

+0

Después de una gran cantidad de pruebas, he encontrado que en la aplicación independiente todavía existe el mismo problema. Continué con la creación de perfiles detallados y tomé la decisión de que cuando FULL GC se ejecuta todos los demás hilos están en reposo y veo que solo se está utilizando un núcleo de CPU. El problema es que el algoritmo es codicioso de memoria y casi todo el tiempo JVM intenta ejecutar FULL GC. Entonces no hay problema en Tomcat, ahora revisaré el uso de la memoria y trataré de encontrar dónde puedo guardar los desperdicios de memoria. Marcaré esta respuesta como correcta porque me lleva a la conclusión correcta (a pesar de que en realidad no está resolviendo el problema). – jutky

0

El servidor se ocupará de la gestión del procesador. No es obligatorio que, si pasa dos solicitudes, use dos CPU.

+0

Entonces, ¿cómo puedo administrarlo para ejecutar diferentes CPU? – jutky

+0

La asignación de recursos no está en nuestras manos. Pero el administrador del servidor puede configurar el equilibrio de carga entre dos servidores dependiendo de algunas condiciones, como la utilización de la memoria, la utilización de la CPU, etc., –

+2

Estoy ejecutando el tomcat por mi cuenta, por lo que debería estar en mis manos. – jutky

0

¿Está ejecutando algún bloque/método sincronizado que forzaría la ejecución en serie? La configuración del conector tomcat en server.xml controla el grupo de subprocesos de solicitud, pero el valor predeterminado es 200 hilos, IIRC.

+0

Tengo bloques sincronizados, pero hasta donde he comprobado no causan el problema. Intento volver a verificarlo una vez más. – jutky

-1

Aquí es el procedimiento para hacer un balance de carga en Tomcat http://tomcat.apache.org/tomcat-5.5-doc/balancer-howto.html

Creo que esto va a funcionar con Tomcat 6 también, ya que mencionan webapp equilibrador se envía con Tomcat 5.0 y posterior.

+0

no estaban hablando de solicitudes de equilibrio de carga a varios servidores que estaban hablando de solicitudes de subprocesos múltiples. – user3338098