2010-07-05 14 views
6

J'ai installé Apache + Tomcat avec mod_jk sur 2 serveurs. Chaque serveur a sa propre paire Apache + Tomcat et chaque requête est servie par les serveurs d'équilibrage de charge Tomcat sur 2 serveurs.Apache + Tomcat avec mod_jk: paramètre maxThread lors de l'équilibrage de charge

J'ai une question sur la façon dont les paramètres maxClient de Apache et maxThread de Tomcat doivent être définis.

Les numéros par défaut sont, Apache: maxClient=150, Tomcat: maxThread=200

Dans cette configuration, si nous avons seulement 1 configuration du serveur, il fonctionnera bien comme travailleur Tomcat ne reçoit jamais les connexions entrantes plus de 150 à la fois. Toutefois, si nous répartissons la charge entre deux serveurs, est-il possible que le serveur Tomcat reçoive 150+ (un certain nombre d'un autre serveur) et que le débordement maxThread soit SEVERE: All threads (200) are currently busy?

Si oui, devrais-je définir maxThread=300 de Tomcat dans ce cas?

Merci

+0

Dans votre configuration 2 du serveur, comment est la charge d'équilibrage fait entre les deux Apaches? – JoseK

+0

C'est fait par un routeur. Mais il ne fait aucun filtrage par volume de trafic. Ainsi, chaque Apache peut recevoir 150 demandes (et plus) à la fois. – c4il

Répondre

7

Réglage maxThreads à 300 devraient être bien - il n'y a pas de règles fixes. Cela dépend si vous voyez des connexions refusées.

Une augmentation trop importante entraîne une forte consommation de mémoire, mais les Tomcats de production sont connus pour fonctionner avec 750 threads. Voir ici aussi. http://java-monitor.com/forum/showthread.php?t=235

Avez-vous réellement eu l'erreur SEVERE? J'ai testé sur notre Tomcat 6.0.20 et il envoie un message INFO quand le maxThreads est croisé. Il ne refuse pas les connexions tant que la valeur acceptCount n'est pas dépassée. La valeur par défaut est 100.

De la documentation Tomcat http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

La longueur maximale de file d'attente pour les demandes de connexion entrantes lorsque tous les possibles threads de traitement des demandes sont en cours d'utilisation. Toute demande reçue lorsque la file d'attente est pleine sera refusée. La valeur par défaut valeur est 100.

Le fonctionnement est

1) Comme le nombre d'augmentation des demandes simultanées, le fil sera créé jusqu'à la valeur maximale configurée (la valeur des maxThreads attribut).

Dans votre cas, le message "Nombre maximum de threads (200) créés" apparaît à ce stade. Cependant, les demandes seront toujours mises en file d'attente pour le service.

2) Si des demandes encore plus simultanées sont reçues, elles sont mises en file d'attente jusqu'au maximum configuré (la valeur de l'attribut acceptCount).

Ainsi, un total de 300 demandes peuvent être acceptées sans échec. (en supposant que votre acceptCount est à la valeur par défaut de 100)

3) Le croisement de ce nombre génère des erreurs Connection Refused, jusqu'à ce que des ressources soient disponibles pour les traiter.

Alors vous devriez être bien jusqu'à ce que vous atteignez l'étape 3

+0

Très bon point sur acceptCount! Cela devrait fonctionner parfaitement. Désolé, j'aurais dû être plus clair dans ma question, mais c'était ma question de type quoi-si général. J'avais à l'origine eu maxThread = 150 et ai eu l'erreur SEVERE. Donc, je l'ai changé à la valeur par défaut 200, mais je me suis rendu compte 200 ne serait pas suffisant non plus pour la raison que j'ai décrite dans la question. Merci beaucoup pour la réponse. Tout a un sens maintenant. – c4il