2010-07-05 16 views
6

Tengo la configuración de Apache + Tomcat con mod_jk en 2 servidores. Cada servidor tiene su propio par Apache + Tomcat, y cada solicitud está siendo servida por los trabajadores de balanceo de carga de Tomcat en 2 servidores.Apache + Tomcat con mod_jk: configuración maxThread al equilibrar la carga

Tengo una pregunta sobre cómo se deben configurar maxClient de Apache y maxThread de Tomcat maxThread.

Los números predeterminados son, Apache: maxClient=150, Tomcat: maxThread=200

En esta configuración, si sólo tenemos la configuración del servidor 1, que iba a funcionar muy bien como Tomcat trabajador nunca recibe las conexiones entrantes más de 150 a la vez. Sin embargo, si estamos balanceando la carga entre 2 servidores, ¿podría ser posible que el trabajador de Tomcat reciba 150 + (algún número de otro servidor) y haga que el desbordamiento de maxThread sea SEVERE: All threads (200) are currently busy?

En caso afirmativo, ¿debo configurar Tomcat's maxThread=300 en este caso?

Gracias

+0

En la configuración de 2 servidor, ¿cómo es el equilibrio de carga hecho a través de las dos apaches? – JoseK

+0

Lo hace un enrutador. Pero no hace ningún filtrado por volumen de tráfico. De modo que cada Apache puede recibir 150 solicitudes (y más) a la vez. – c4il

Respuesta

7

Configuración maxThreads a 300 debe estar bien - no hay reglas fijas. Depende de si ve alguna conexión rechazada.

Aumentar demasiado provoca un alto consumo de memoria, pero se sabe que los Tomcats de producción se ejecutan con 750 subprocesos. Vea aquí también. http://java-monitor.com/forum/showthread.php?t=235

¿De verdad recibió el error SEVERE? Lo probé en nuestro Tomcat 6.0.20 y arroja un mensaje INFO cuando se cruza el maxThreads.

INFO: Maximum number of threads (200) created for connector with address null and port 8080 

no se niega conexiones hasta que se cruza el valor acceptCount. El valor por defecto es 100.

A partir de los documentos Tomcat http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

La longitud máxima cola para entrantes solicitudes de conexión cuando todos los posibles hilos de procesamiento solicitud están en uso. Se rechazarán todas las solicitudes que se reciban cuando la cola está llena. El valor por defecto es 100.

la forma en que funciona es

1) A medida que aumenta el número de solicitudes simultáneas, las discusiones se crearán hasta el máximo configurado (el valor de los atributos de maxThreads).

En su caso, aparecerá el mensaje "Número máximo de hilos (200) creados" en este punto. Sin embargo, las solicitudes seguirán en cola para el servicio.

2) Si se reciben aún más solicitudes simultáneas, se ponen en cola hasta el máximo configurado (el valor del atributo acceptCount).

Por lo tanto, se pueden aceptar un total de 300 solicitudes sin falla. (suponiendo que acceptCount está en el valor predeterminado de 100)

3) Al cruzar este número, se producen errores de conexión rechazada, hasta que haya recursos disponibles para procesarlos.

Así que debe estar bien hasta que llegue el paso 3

+0

Muy buen punto acerca de acceptCount! Esto debería funcionar perfectamente. Lo siento, debería haber sido más claro en mi pregunta, pero fue mi pregunta general sobre qué pasaría si. Originalmente tenía maxThread = 150 y obtuve el error SEVERE. Así que lo cambié al valor predeterminado 200, pero luego me di cuenta de que 200 tampoco serían suficientes por la razón que describí en la pregunta. Muchas gracias por la respuesta. Todo tiene sentido ahora. – c4il

Cuestiones relacionadas