2010-09-17 37 views
8

Tenemos un nuevo cliente, y actualmente estamos realizando pruebas de resistencia en la producción como servidor con 100 subprocesos HTTP simultáneos (usando Jmeter). El problema es que aunque tenemos 2 procesadores Xeon (cada CPU con 4 núcleos, total a 8 núcleos), solo puedo ver a Tomcat utilizando 4 núcleos, no 8 núcleos. los 4 núcleos creo que pertenece a solo 1 procesador. los otros 4 hilos están virtualmente durmiendo.¿Cómo se configura Tomcat para usar más de 1 CPU?

me dio la impresión del documento Apache que si tenemos la máquina de múltiples CPU, debemos configurar acceptorThreadCount = "2": http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

Tenemos cambiar el conector de forma predeterminada a tomcatThreadPool con maxThreads = "150" MinSpareThreads = "4" y conector ejecuter para tener acceptorThreadCount = "2". Pero solo sigue utilizando 1 CPU.

¿Alguna idea de cómo configurar para utilizar todos los núcleos (o todos los procesadores de la CPU)?

+1

La JVM hace la utilización, por lo que puede ser que su carga aún no sea lo suficientemente alta. ¿Puedes aumentar e intentar? – JoseK

+0

lo he intentado con 200 y 300 hilos, sigue siendo el mismo. – Reusable

+0

¿con qué sistema operativo se está ejecutando? – Sean

Respuesta

3

Un par de pensamientos al azar para ayudarte.

La JVM hará su propia programación de tareas internamente. Hay momentos en que si la JVM no piensa que una CPU está siendo sobrecargada puede reservar algunos núcleos para operaciones críticas. Por lo tanto, puede ver que algunos núcleos se usan y otros están inactivos.

Otra posibilidad es que la afinidad de la CPU debe establecerse explícitamente. En Unix se puede comprobar, que la CPU de la máquina virtual Java se ha optado por utilizar el taskset command ::

taskset -p <pid> 

En Windows, abrir el administrador de tareas, vaya a la pestaña de procesos, haga clic derecho en un proceso y elija Establecer Afinidad . Puede ver qué CPU/Núcleos están configurados para ser utilizados.

No conozco un parámetro de inicio en Java/Tomcat para controlar el uso de la CPU. Creo que esto debería estar en el nivel del sistema operativo. Tampoco recuerdo haber leído nunca acerca de la JVM codificada para limitar el número de CPU/núcleos que se utilizan.

2

El comentario de @JoseK desencadena todo el cuello de botella. nuestra aplicación está escribiendo demasiados registros. en una instancia, intentamos reducir la cantidad de registros en nuestro archivo de registro, notamos que el rendimiento general es mejor y una mayor utilización de la CPU.

Luego intentamos con el nivel de registro de log4k en "WARN", y ¡guau! la aplicación está utilizando el 70% de todos los núcleos de CPU.

Debemos verificar el uso del disco antes de hacer la pregunta. ¡Gracias!

+0

Es probable que no sea el acceso al disco, sino más bien el bloqueo interno en el marco de trabajo de registro que acelera su aplicación para realizar más en serie. – nos

+0

Podría ser. todo lo que sabemos ahora es apagar el registro, la aplicación tiene un mejor rendimiento. todavía tengo 2 días más para jugar. ¿hay algún mejor marco de registro o alguna configuración especial en Log4j que pueda ser más rápida? – Reusable

+0

@Reusable: demasiado tarde para ser de ayuda --- la mayoría de los marcos de registro tienen un apéndice de red. Tienden a no sufrir los problemas de bloqueo de archivos que describes. –

Cuestiones relacionadas