Skip to content

sanogotech/springbootJavaPerfJprofiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mysamplespringbootNoOpt


Simulation de Problèmes de Performance avec Spring Boot

Ce projet Spring Boot permet de simuler différents problèmes de performance et de les analyser à l'aide de JProfiler.

Objectifs

  • Identifier et diagnostiquer des problèmes de performance courants.
  • Utiliser JProfiler pour analyser les métriques de performance comme l'utilisation CPU, mémoire et les threads.

Fonctionnalités Simulées

Le projet inclut les scénarios suivants :

  1. Problèmes de requêtes lentes (N+1 Problem) : Mauvaise gestion des requêtes dans la base de données.
  2. Fuite mémoire : Objets non libérés, provoquant une utilisation mémoire croissante.
  3. Synchronisation excessive : Verrous inutiles ralentissant les threads.
  4. Calculs intensifs : Traitement lourd consommant beaucoup de CPU.
  5. Appels réseau lents : Requêtes HTTP bloquantes.
  6. Cache mal configuré : Mauvaise gestion des données en cache.
  7. Thread pool sous-dimensionné : Surcharge des threads avec un pool trop petit.

Configuration et Déploiement

1. Prérequis

  • JDK 17+
  • Maven
  • JProfiler (dernière version)
  • Un environnement Spring Boot configuré.

2. Installation

  1. Clonez ce dépôt :

    git clone https://github.com/votre-utilisateur/spring-performance-simulator.git
    cd spring-performance-simulator
  2. Compilez le projet avec Maven :

    mvn clean install
  3. Lancez l'application :

    java -agentpath:/chemin/vers/jprofiler/bin/linux-x64/libjprofilerti.so=port=8849 -jar target/performance-simulator-0.0.1-SNAPSHOT.jar

    (Adaptez le chemin de libjprofilerti.so selon votre environnement)


Configurer et Tester

1. Configurer JProfiler

  1. Attachez JProfiler à l'application via l'agent en ligne de commande ou à partir de votre IDE (IntelliJ/Visual Studio Code).
  2. Activez les analyses suivantes dans JProfiler :
    • CPU Profiling : Pour mesurer l'utilisation du CPU.
    • Heap Dump Analysis : Pour surveiller l'utilisation mémoire.
    • Thread States : Pour analyser les threads et les verrous.

2. Tester avec des Endpoints

Chaque endpoint simule un problème de performance spécifique. Utilisez des outils comme curl ou Postman pour tester chaque scénario :

Problème Endpoint
Requêtes lentes GET /performance/database
Fuite mémoire GET /performance/memory-leak
Synchronisation excessive GET /performance/synchronized
Calculs intensifs GET /performance/computation
Appels réseau lents GET /performance/http
Cache mal configuré GET /performance/cache
Thread pool sous-dimensionné GET /performance/thread-pool

Exemple de commande curl :

curl http://localhost:8080/performance/database

3. Analyser les Résultats

  1. Charge CPU : Analysez les calculs intensifs dans JProfiler avec Hot Spots.
  2. Temps d’exécution : Vérifiez les threads bloqués dans les sections Thread States et Monitor Usage.
  3. Allocation mémoire : Surveillez les fuites ou mauvaises allocations via un Heap Dump.

Ressources Supplémentaires


L'AB Test avec Apache Bench (ab) peut être utile pour évaluer les performances de certains des problèmes simulés, mais il a des limitations dans ce contexte spécifique. Voici une analyse de son utilité :


Cas où ab est utile :

  1. Problème de requêtes lentes (N+1 Problem)

    • Pourquoi utile :
      Apache Bench permet de générer des charges simulées sur l'endpoint /performance/database. Cela permet de vérifier l'impact de requêtes non optimisées sous une charge élevée.
    • Comment tester :
      ab -n 1000 -c 10 http://localhost:8080/performance/database
      • -n 1000 : 1000 requêtes totales.
      • -c 10 : 10 requêtes simultanées.
  2. Problème de cache mal configuré

    • Pourquoi utile :
      Vous pouvez simuler un nombre important d'appels sur /performance/cache pour évaluer comment le cache se dégrade sous une charge.
    • Comment tester :
      ab -n 500 -c 5 http://localhost:8080/performance/cache
  3. Problème d'appels HTTP lents

    • Pourquoi utile :
      Apache Bench peut reproduire un grand nombre d'appels pour voir comment les temps de réponse s'accumulent à cause des latences réseaux simulées.
    • Comment tester :
      ab -n 200 -c 5 http://localhost:8080/performance/http

Cas où ab est moins utile :

  1. Problème de fuite mémoire

    • Pourquoi moins utile :
      Les fuites mémoire ne sont pas directement visibles dans les résultats d'Apache Bench (temps de réponse ou taux d'erreur). Il est préférable d'utiliser un outil comme JProfiler ou VisualVM pour surveiller l'utilisation de la mémoire.
  2. Problème de synchronisation excessive

    • Pourquoi moins utile :
      ab ne montre pas les problèmes de contention des threads ou des verrous. Ces problèmes sont mieux analysés avec des outils comme JProfiler (section Thread Locking).
  3. Problème de calculs intensifs

    • Pourquoi moins utile :
      Les calculs CPU intensifs peuvent augmenter le temps de réponse, mais ab ne fournit pas de détails sur la charge CPU. JProfiler (ou une commande comme top/htop) est mieux adapté ici.
  4. Problème de thread pool sous-dimensionné

    • Pourquoi moins utile :
      ab peut mettre en évidence des temps de réponse plus longs en raison de la saturation du pool de threads, mais il ne fournit pas de détails sur le comportement interne du thread pool. JProfiler est nécessaire pour visualiser la saturation dans la gestion des tâches.

Conclusion : AB Test et JProfiler

  • ab est complémentaire à JProfiler :

    • Il est utile pour générer une charge simulée et mesurer les temps de réponse, les erreurs et le débit.
    • Les résultats de ab peuvent déclencher une analyse plus approfondie dans JProfiler.
  • Utilisation recommandée :

    1. Lancez un test de charge avec ab.
    2. Surveillez simultanément avec JProfiler (CPU, mémoire, threads, I/O).
    3. Corrélez les résultats pour identifier et comprendre les problèmes de performance.

Par exemple, pour /performance/cache, vous pourriez observer une augmentation de l’utilisation mémoire dans JProfiler pendant le test ab.


).

About

spring boot Java

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published