2012-09-26 97 views
5

Preguntando cómo aumentar el número de conexiones simultáneas en tomcat 7. Hice algunas investigaciones y encontré en la documentación de apache que establecer valores para acceptCount, maxConnections y aumentar el maxThreads lo haría, pero cuando intentado, yo sólo era capaz de enviar 500 solicitudes de 1000. a continuación se muestra mi fragmento del archivo server.xml -Aumentar el número de conexiones simultáneas en tomcat 7

 <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" 
     maxThreads="2000" acceptCount="1000" maxConnections="1000" 
     scheme="https" secure="true" 
     keystoreFile="certs/tomcat.keystore" keystorePass="xxxxxxxx" 
     clientAuth="false" sslProtocol="TLS" server="Apache" /> 

puede usted por favor me ayude a encontrar la mejor y más fácil manera de deshacerse de éste. ?

Gracias, Sirish.

+0

Debería hacer un volcado de subprocesos para averiguar qué está bloqueando las solicitudes, porque _ha configurado _ 2000 hilos (máximo pero no mínimo, por lo que Tomcat necesitará crear más hilos sobre la marcha). Sin embargo, 2000 hilos son enormes, ¿estás seguro de que necesitas tantos? –

+0

Hola Frank, solo estoy jugando para ver si el aumento de los hilos hace alguna diferencia y también consciente de que podría provocar problemas de memoria. En este punto, me gustaría configurar el servidor para que acepte tantas conexiones como sea posible sin un defecto de 200 hilos (como establece tomcat de forma predeterminada). Tengo curiosidad por saber cómo hacer un volcado de hilo por cierto. Cualquier ayuda es muy apreciada. Gracias.!! – Sirish

+0

Para obtener un volcado de hilo, puede 'matar -3 PID' (si está en algún Unix, hay una combinación Ctrl-algo en Windows para lograr el mismo resultado) que imprimirá el volcado de hilo en el resultado estándar, o use 'jstack PID> threads.txt', jstack es parte del JDK. Incluso si solo tiene 200 hilos, si son todos usados ​​por solicitudes concurrentes, será una lectura de "larga duración" para analizar. –

Respuesta

13

La creación de un gran número de hilos y la aceptación de un gran número de solicitudes no significa que su servidor será capaz de procesar las solicitudes

Si tiene N hilos y sólo M físicas procesadores/núcleos , entonces cada hilo obtendrá 1 procesador si M >= N y un promedio de M/N procesadores si M < N. Supongamos que tiene N solicitudes que se ejecutan cada una en una secuencia, y cada solicitud toma R segundos de tiempo de CPU. El tiempo promedio transcurrido T tomado para ejecutar una solicitud es T = Min(R, R * N/M) seconds. Es bastante claro que a medida que aumenta N (el número de subprocesos activos y solicitudes activas) el tiempo medio transcurrido T para cada solicitud individual aumenta proporcionalmente.

Además de eso, si tiene muchos subprocesos, todos usarán memoria, y todos competirán por acceder a estructuras de datos compartidas ... o a la base de datos. Todo este uso y contención de recursos adicionales está aumentando los gastos generales del sistema en su conjunto de varias maneras.

Entonces, lo que sospecho que está sucediendo es que con ese número de subprocesos cada uno tratando de procesar las solicitudes simultáneamente, el tiempo T está comenzando a aproximarse al tiempo de espera de solicitud del lado del cliente o del servidor. (Y tenga en cuenta que los caprichos del planificador, etc. significan que el tiempo real para cualquier solicitud dada podría ser menor o considerablemente mayor que el promedio). Cuando una solicitud expira, esto a su vez reduce el rendimiento en términos de solicitudes que reciben completado, porque el trabajo realizado en cada solicitud expirada se desperdicia (típicamente).


A menos que las solicitudes implican hablar de frenar los servicios externos, te aconsejo que para reducir el número de hilos a no más de 200 ... el valor por defecto de Tomcat 2. Espero que esto aumente el rendimiento del sistema. No necesariamente le permitirá procesar todas las 1000 solicitudes que se lanzaron en ese período, pero preveo que aumentará la cantidad de solicitudes que se procesaron con éxito.

1 - De hecho, aumentar el número de hilos a 1000 ni siquiera significa que podrá aceptar 1000 solicitudes. Si tiene cientos de hilos en estado RUNNABLE, es probable que el hilo oyente de Tomcat (el que llama al ServerSocket.accept()) tenga falta de CPU y no pueda mantener el ritmo de solicitud de llegada.

2 - Necesitará hacer algunos ajustes de rendimiento en su sistema, pero no me sorprendería si reducir aún más las cosas mejoradas. Dependerá de su hardware, su aplicación y (supongo) su base de datos back-end.

+3

Coincido con @StephenC, tengo aplicaciones en producción (con un tráfico razonablemente alto) donde hemos reducido el número máximo de hilos a 20, porque responden lo suficientemente rápido como para que el número de solicitudes procesadas simultáneamente sea de 1 o 2 en promedio (monitoreado a través de JMX), y cuando sucede algo malo (servicio web no responde, pausa del GC inusualmente larga), de repente no tenemos 200 solicitudes simultáneas con sus gastos generales de memoria para administrar, lo que empeora la situación. El límite superior existe, por lo que la aplicación no agota los recursos, no limita el rendimiento. –

Cuestiones relacionadas