Un guide des profileurs Java

1. Vue d'ensemble

Parfois, écrire du code qui s'exécute simplement ne suffit pas. Nous pourrions vouloir savoir ce qui se passe en interne comme la façon dont la mémoire est allouée, les conséquences de l'utilisation d'une approche de codage par rapport à une autre, les implications des exécutions simultanées, les domaines pour améliorer les performances, etc. Nous pouvons utiliser des profileurs pour cela.

Un Java Profiler est un outil qui surveille les constructions et les opérations de bytecode Java au niveau JVM . Ces constructions et opérations de code incluent la création d'objets, les exécutions itératives (y compris les appels récursifs), les exécutions de méthodes, les exécutions de threads et les garbage collection.

Dans cet article, nous discuterons des principaux profileurs Java: JProfiler, YourKit, Java VisualVM et Netbeans Profiler.

2. JProfiler

JProfiler est un premier choix pour de nombreux développeurs. Avec une interface utilisateur intuitive, JProfiler fournit des interfaces pour visualiser les performances du système, l'utilisation de la mémoire, les fuites de mémoire potentielles et le profilage des threads.

Grâce à ces informations, nous pouvons facilement savoir ce dont nous avons besoin pour optimiser, éliminer ou modifier le système sous-jacent.

Voici à quoi ressemble l'interface de JProfiler:

Interface de présentation de JProfiler avec fonctionnalités

Comme la plupart des profileurs, nous pouvons utiliser cet outil pour les applications locales et distantes. Cela signifie qu'il est possible de profiler des applications Java s'exécutant sur des machines distantes sans avoir à installer quoi que ce soit dessus .

JProfiler fournit également un profilage avancé pour les bases de données SQL et NoSQL . Il fournit un support spécifique pour le profilage des bases de données JDBC, JPA / Hibernate, MongoDB, Casandra et HBase.

La capture d'écran ci-dessous montre l'interface de détection JDBC avec une liste des connexions actuelles:

Vue de sondage de la base de données JProfiler

Si nous souhaitons en savoir plus sur l' arbre d'appel des interactions avec notre base de données et voir les connexions qui peuvent être divulguées , JProfiler gère bien cela.

Live Memory est une fonctionnalité de JProfiler qui nous permet de voir l'utilisation actuelle de la mémoire par notre application . Nous pouvons afficher l'utilisation de la mémoire pour les déclarations d'objets et les instances ou pour l'arborescence des appels complète.

Dans le cas de l'arborescence des appels d'allocation, nous pouvons choisir d'afficher l'arborescence des appels des objets vivants, des objets récupérés ou des deux. Nous pouvons également décider si cet arbre d'allocation doit être pour une classe ou un package particulier ou pour toutes les classes.

L'écran ci-dessous montre l'utilisation de la mémoire en direct par tous les objets avec le nombre d'instances:

Vue de la mémoire en direct de JProfiler

JProfiler prend en charge l' intégration avec les IDE populaires tels que Eclipse, NetBeans et IntelliJ. Il est même possible de naviguer de l'instantané au code source !

3. YourKit

YourKit Java Profiler fonctionne sur de nombreuses plates-formes différentes et fournit des installations séparées pour chaque système d'exploitation pris en charge (Windows, MacOS, Linux, Solaris, FreeBSD, etc.).

Comme JProfiler, YourKit possède des fonctionnalités de base pour la visualisation des threads, des récupérations de mémoire, de l'utilisation de la mémoire et des fuites de mémoire, avec prise en charge du profilage local et distant via le tunneling ssh .

Voici un aperçu des résultats du profilage de la mémoire d'une application serveur Tomcat:

Profilage de la mémoire YourKit Java Profiler de l'application serveur Tomcat

YourKit est également utile lorsque nous voulons profiler des exceptions levées . Nous pouvons facilement savoir quels types d'exceptions ont été levées et le nombre de fois où chaque exception s'est produite.

YourKit a une fonctionnalité intéressante de profilage du processeur qui permet un profilage ciblé sur certaines zones de notre code telles que les méthodes ou les sous-arbres dans les threads. Ceci est très puissant car il permet un profilage conditionnel via sa fonction de simulation.

La figure 5 montre un exemple de l'interface de profilage de thread:

Figure 5. Interface de profilage des threads YourKit Java Profiler

Nous pouvons également profiler les appels de base de données SQL et NoSQL avec YourKit. Il fournit même une vue des requêtes réelles qui ont été exécutées.

Bien que ce ne soit pas une considération technique, le modèle de licence permissive de YourKit en fait un bon choix pour les équipes multi-utilisateurs ou distribuées, ainsi que pour les achats de licence unique.

4. Java VisualVM

Java VisualVM est un outil de profilage simplifié mais robuste pour les applications Java. Par défaut, cet outil est fourni avec le Java Development Kit (JDK). Son fonctionnement repose sur d'autres outils autonomes fournis dans le JDK, tels que JConsole , jstat , jstack , jinfo et jmap .

Ci-dessous, nous pouvons voir une interface de présentation simple d'une session de profilage en cours à l'aide de Java VisualVM:

Profilage d'application de serveur Tomcat local Java VisualVM

Un avantage intéressant de Java VisualVM est que nous pouvons l' étendre pour développer de nouvelles fonctionnalités sous forme de plugins . Nous pouvons ensuite ajouter ces plugins au centre de mise à jour intégré de Java VisualVM.

Java VisualVM prend en charge le profilage local et distant , ainsi que le profilage de la mémoire et du processeur. La connexion à des applications distantes nécessite la fourniture d'informations d'identification (nom d'hôte / IP et mot de passe si nécessaire) mais ne prend pas en charge le tunnel SSH . Nous pouvons également choisir d'activer le profilage en temps réel avec des mises à jour instantanées (généralement toutes les 2 secondes).

Ci-dessous, nous pouvons voir les perspectives de mémoire d'une application Java profilée à l'aide de Java VisualVM:

Histogramme du tas de mémoire Java VisualVM

Avec la fonction d'instantané de Java VisualVM, nous pouvons prendre des instantanés des sessions de profilage pour une analyse ultérieure .

5. NetBeans Profiler

Le NetBeans Profiler est fourni avec l'EDI NetBeans open source d'Oracle .

Bien que ce profileur partage de nombreuses similitudes avec Java VisualVM , c'est un bon choix lorsque nous voulons que tout soit enveloppé dans un seul programme (IDE + Profiler).

Tous les autres profileurs mentionnés ci-dessus fournissent des plugins pour améliorer l'intégration des IDE.

La capture d'écran ci-dessous montre un exemple de l'interface NetBeans Profiler:

Interface de télémétrie Netbeans Profiler

Netbeans Profiler est également un bon choix pour le développement et le profilage légers . NetBeans Profiler fournit une fenêtre unique pour configurer et contrôler la session de profilage et afficher les résultats. Il donne une caractéristique unique de savoir à quelle fréquence le garbage collection se produit .

6. Autres profileurs solides

Certaines mentions honorables ici sont Java Mission Control, New Relic et Prefix (de Stackify) - ils ont globalement moins de part de marché, mais méritent certainement une mention. Par exemple, Stackify's Prefix est un excellent outil de profilage léger, bien adapté au profilage non seulement des applications Java, mais également d'autres applications Web.

7. Conclusion

Dans cet article, nous avons discuté du profilage et des profileurs Java. Nous avons examiné les fonctionnalités de chaque Profiler et ce qui informe le choix potentiel de l'un par rapport à l'autre.

Il existe de nombreux profileurs Java disponibles, certains ayant des caractéristiques uniques. Le choix du profileur Java à utiliser, comme nous l'avons vu dans cet article, dépend principalement de la sélection d'outils du développeur, du niveau d'analyse requis et des fonctionnalités du profileur.