Gestion de l'environnement Java et optimisation des performances

Compoasnts clés de l'écosystème Java

Collecte des déchets (Garbage Collection)

Définition et avantages

La collecte des déchets (GC) est un mécanisme d'allocation et de libération automatique de la mémoire. Il améliore l'abstraction dans le développement logiciel, permet aux programmeurs de se concentrer sur les fonctionnalités métier sans gérer la mémoire manuellement, réduit le couplage entre modules et minimise les erreurs liées à une mauvaise gestion mémoire. Cela accélère le développement et renforce la sécurité des applications.

Machine virtuelle Java (JVM)

La JVM est le cœur de la portabilité Java. Les programmes sont compilés en fichiers .class, exécutés par la JVM sans interaction directe avec le système d'exploitation hôte. La JVM interprète ces classes pour les adapter à l'environnement local.

Environnement d'exécution Java (JRE)

Le JRE fournit les bibliothèques nécessaires à l'exécution des classes Java. Il inclut la JVM et les librairies associées. Un fichier .clas peut être distribué avec le JRE pour permettre son exécution sur d'autres machines, indépendamment de l'architecture système.

Kit de développement Java (JDK)

Le JDK complète le JRE avec des outils de développement comme le compilateur javac. Il contient des répretoires pour les binaires, les en-têtes, les bibliothèques et le JRE. Les IDE comme IntelliJ IDEA intègrent souvent leurs propres compilateurs, nécessitant uniquement le JRE pour l'exécution.

Relation entre JDK, JRE et JVM

Le JDK inclut le JRE, qui contient la JVM. Le JRE est requis pour exécuter des programmes Java, tandis que le JDK est destiné au développement. La JVM gère l'interprétation des classes via des chargeurs et des interpréteurs internes.

Configuration de l'environnement Java

Variables d'environnement pour le JDK

Créez un script de configuration, par exemple dans /etc/profile.d/java_env.sh :

#!/bin/bash
# Script de configuration Java
export JAVA_DIR=/opt/java/current
export JRE_DIR=$JAVA_DIR/jre
export CLASSPATH=.:$JAVA_DIR/lib:$JRE_DIR/lib
export PATH=$JAVA_DIR/bin:$PATH

Gestion des archives JAR

Les fichiers JAR (Java Archive) compressent plusieurs fichiers en un format portable. Utilisez l'outil jar depuis le JDK :

  • Créer une archive : jar -cf mon_app.jar src/
  • Lister le contenu : jar -tf mon_app.jar
  • Extraire les fichiers : jar -xf mon_app.jar
  • Mettre à jour une archive : jar -uf mon_app.jar META-INF/MANIFEST.MF

Options courantes : -v pour les détails, -0 sans compression, -M sans fichier manifeste. Exemple sans compression : jar -cvf0 archive.jar *

Administration et optimisation de Tomcat

Script de démarrage personnalisé

Configurez un script startenv.sh pour ajuster les paramètres JVM :

#!/bin/sh
export TOMCAT_USER="appuser"
JAVA_OPTS="-server -Xms8G -Xmx8G"
JAVA_OPTS="$JAVA_OPTS -XX:InitialHeapSize=8G"
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails"
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=$CATALINA_BASE/dumps/"
JAVA_OPTS="$JAVA_OPTS -Xloggc:$CATALINA_BASE/logs/gc.log"
export JAVA_OPTS
chown -R appuser:appuser $CATALINA_BASE/logs
chown -R appuser:appuser $CATALINA_BASE/dumps

Ajustement des limites HTTP

Dans le fichier server.xml, modifiez le connecteur pour augmenter la taille des en-têtes :

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxHttpHeaderSize="32768"
           redirectPort="8443" />

Diagnostic des problèmes JVM

Commandes d'analyse mémoire

Pour un processus avec PID 54321 :

# Inspecter l'utilisation mémoire de la heap
jmap -heap 54321 > heap_usage.txt
# Lister les instances d'objets par fréquence
jmap -histo 54321 > object_histogram.txt
# Exporter un dump mémoire complet
jmap -dump:format=b,file=memory_dump.hprof 54321
# Analyser l'état des threads
jstack 54321 > thread_stack.txt
jstack -l 54321 > thread_details.txt

En cas d'espace insuffisant, utilisez l'option -F pour forcer l'opération.

Niveaux de journalisation avec Log4j

Log4j définit une hiérarchie de niveaux : ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF. Chaque niveau inclut tous les niveaux supérieurs. Les niveaux TRACE et DEBUG sont destinés au débogage, INFO aux événements significatifs, WARN aux avertissements non critiques, ERROR aux erreurs fonctionnelles, et FATAL aux défaillances systémiques nécessitant un arrêt immédiat.

Étiquettes: JVM jre JDK Garbage Collection Tomcat

Publié le 16 juin à 21h58