Configuration des pools de threads pour les serveurs Web Java

1. Introduction

Dans ce didacticiel, nous examinons la configuration du pool de threads pour les serveurs d'applications Web Java tels que Apache Tomcat, Glassfish Server et Oracle Weblogic.

2. Pools de threads de serveur

Les pools de threads de serveur sont utilisés et gérés par un serveur d'applications Web pour une application déployée. Ces pools de threads existent en dehors du conteneur Web ou du servlet, ils ne sont donc pas soumis à la même limite de contexte.

Contrairement aux threads d'application, les threads de serveur existent même après l'arrêt d'une application déployée.

3. Apache Tomcat

Tout d'abord, nous pouvons configurer le pool de threads du serveur de Tomcat via la classe de configuration Executor dans notre server.xml :

minSpareThreads est le plus petit du pool, y compris au démarrage. maxThreads est le plus grand du pool avant que le serveur ne commence à mettre les requêtes en file d'attente.

Tomcat les attribue par défaut à 25 et 200, respectivement. Dans cette configuration, nous avons rendu le pool de threads un peu plus petit que la valeur par défaut.

3.1. Tomcat intégré

De même, nous pouvons modifier un serveur Tomcat intégré pour Spring Boot afin de configurer un pool de threads en définissant une propriété d'application:

server.tomcat.max-threads=250

À partir de Boot 2.3, la propriété est devenue:

server.tomcat.threads.max=250

4. Glassfish

Ensuite, mettons à jour notre serveur Glassfish.

Glassfish utilise une commande admin contrairement au fichier de configuration XML de Tomcat, server.xml. À partir de l'invite, nous exécutons:

create-threadpool

Nous pouvons ajouter à create-threadpool les indicateurs maxthreadpoolsize et minthreadpoolsize. Ils fonctionnent de la même manière que Tomcat minSpareThreads et maxThreads :

--maxthreadpoolsize 250 --minthreadpoolsize 25

Nous pouvons également spécifier combien de temps un thread peut être inactif avant de revenir au pool:

--idletimeout=2

Et puis, nous fournissons le nom de notre pool de threads à la fin:

asadmin> create-threadpool --maxthreadpoolsize 250 --minthreadpoolsize 25 --idletimeout=2 threadpool-1

5. Weblogic

Oracle Weblogic nous donne la possibilité de modifier un pool de threads à réglage automatique avec un WorkManager.

De la même manière que les files d'attente de threads, un WorkManager gère un pool de threads en tant que file d'attente. Cependant, le WorkManager ajoute des threads dynamiques basés sur le débit en temps réel. Weblogic effectue régulièrement des analyses du débit pour optimiser l'utilisation des threads.

Qu'est-ce que cela signifie pour nous? Cela signifie que même si nous pouvons modifier le pool de threads, le serveur Web décidera en fin de compte de générer de nouveaux threads.

Nous pouvons configurer notre pool de threads dans la console d'administration Weblogic:

La mise à jour des valeurs Taille minimale du pool de threads à réglage automatique et Taille maximale du pool de threads à réglage automatique définissent les limites minimale et maximale des WorkManagers.

Notez les valeurs de temps maximum de fil bloqué et d' intervalle de minuterie de fil bloqué . Ceux-ci aident le WorkManager à classer les threads bloqués.

Parfois, un processus de longue durée peut provoquer une accumulation de threads bloqués. Le WorkManager créera de nouveaux threads à partir du pool de threads pour compenser. Toute mise à jour de ces valeurs pourrait prolonger le temps nécessaire pour permettre au processus de se terminer.

Les threads bloqués peuvent indiquer des problèmes de code, il est donc toujours préférable de s'attaquer à la cause principale plutôt que d'utiliser une solution de contournement.

6. Conclusion

Dans cet article rapide, nous avons examiné plusieurs façons de configurer les pools de threads du serveur d'applications.

Bien qu'il existe des différences dans la façon dont les serveurs d'applications gèrent les divers pools de threads, ils sont configurés à l'aide de concepts similaires.

Enfin, rappelons-nous que la modification des valeurs de configuration des serveurs Web ne constitue pas des correctifs appropriés pour un code peu performant et de mauvaises conceptions d'applications.