mercredi 22 novembre 2023

Optimisation du pool de threads dans une application Spring Boot 3.1.1 avec Tomcat

 

Introduction

Les applications Spring Boot sont souvent déployées avec un serveur intégré, comme Tomcat, qui suit le modèle thread-par-requête. Dans ce modèle, chaque requête est traitée par un thread unique provenant d’un pool de threads. La taille de ce pool de threads peut avoir un impact significatif sur les performances de l’application.

Problématique

La configuration par défaut du pool de threads de Tomcat dans une application Spring Boot peut ne pas être optimale pour toutes les situations. Par exemple, la taille par défaut du pool de threads peut atteindre 200 threads avec 10 threads de travail toujours en cours d’exécution. Bien que ces valeurs soient un bon point de départ pour un environnement de production, elles peuvent ne pas être idéales pour un environnement local où l’optimisation de la consommation des ressources est une priorité.

Solution

Spring Boot permet de personnaliser la configuration du pool de threads de Tomcat à l’aide de propriétés spécifiques. Par exemple, vous pouvez définir le nombre maximum de threads de traitement de requêtes via la propriété server.tomcat.threads.max. De plus, vous pouvez définir le nombre minimum de threads qui doivent toujours être en cours d’exécution via la propriété server.tomcat.threads.min-spare.

server:
  port: 9001
  tomcat:
    connection-timeout: 2s
    keep-alive-timeout: 15s
    threads:
      max: 50
      min-spare: 5

Mise à jour pour Spring Boot 3.1.1

Avec la version 3.1.1 de Spring Boot, la configuration du pool de threads reste la même. Cependant, il est important de noter que la configuration optimale du pool de threads peut varier en fonction des spécificités de votre application et de votre environnement. Il est donc recommandé de surveiller régulièrement les performances de votre application et d’ajuster la configuration du pool de threads en conséquence.

Discussion

Déterminer la meilleure configuration pour un pool de threads est complexe et il n’existe pas de formule magique pour le calculer. Une analyse des ressources, une surveillance et de nombreux essais sont généralement nécessaires pour trouver une configuration appropriée. En ajustant ces valeurs, vous pouvez optimiser la consommation des ressources de votre application Spring Boot tout en maintenant de bonnes performances.

Les limites des threads de plateforme

Par défaut, Spring Boot fonctionne avec un pool de threads de 200 threads. Cette valeur peut être modifiée dans les propriétés de l’application pour dire, 500 ou 1000 ou 2000, si vous ajoutez suffisamment de mémoire à votre machine ou VM ou conteneur.
Cependant, si le nombre d’utilisateurs simultanés dépasse cette limite, c’est-à-dire le nombre de threads, certains utilisateurs subiront un problème de performance car ils devront attendre leur tour.

Utilisation de threads virtuels

Nous pouvons surmonter cette limitation en utilisant des threads virtuels au lieu de threads de plateforme pour servir chaque requête utilisateur dans Spring Boot.
En faisant cela, le nombre de threads virtuels qui peuvent fonctionner en parallèle est théoriquement illimité.

Aucun commentaire:

Enregistrer un commentaire

to criticize, to improve