10 Options JVM importantes pour le système d’application JAVA de production

Découvrez les options JVM (Java Virtual Machine) essentielles pour de meilleures performances et le débogage.


Si vous êtes un développeur Java ou un administrateur de middleware, vous devez connaître la signification des options JVM ainsi que leur importance et leur impact sur votre application. Découvrons-les.

Présentation des options JVM

En parlant des options JVM, il existe trois types d’options que vous pouvez inclure dans votre JVM, les options standard, non standard et avancées. Si vous essayez une option avancée, vous utilisez toujours l’option avec -XX. De même, si vous appliquez une option non standard, vous utilisez -X. Les options standard ne rajoutent rien à l’option.

Quelles options JVM sont utilisées par votre application?

Si l’application s’exécute sous Linux, vous pouvez utiliser ps -ef | grep java pour identifier le processus Java et regarder les options JVM imprimées comme arguments de processus. Si plusieurs processus Java sont en cours sur le système, vous devrez peut-être utiliser un mot clé unique à votre application Java..

Si votre argument est trop long, essayez d’utiliser ps -auxww car cette commande affichera également une longue liste d’arguments.

Après avoir une liste d’indicateurs JVM, vous pouvez vous faire une idée des comportements de toute application Java, par exemple Tomcat.

Taille du tas Java

 -Xms – définir la taille initiale du tas Java
-Xmx – définir la taille maximale du tas Java
-Xss – définir la taille de la pile de threads java

-Xms – Cette option consiste à définir la taille de segment de départ pour la JVM, par exemple, Xms2048m, ce qui signifie qu’une taille de segment initiale de JVM est de 2 Go environ. Ainsi, lorsqu’une JVM démarre, la mémoire du tas sera d’autant plus grande. Étonnamment oui! Ceci est effectué pour empêcher le redimensionnement lors du démarrage et améliorer le temps de démarrage de la JVM.

-Xmx – Cette option consiste à définir la taille de segment de mémoire maximale de la JVM, par exemple, Xmx2048m, ce qui signifie que la taille de segment de mémoire maximale de la JVM sera de 2 Go uniquement..

Vous aurez essentiellement toujours-Xmsand-Xmx ensemble.

Définir le pourcentage du tas

-XX: MaxHeapFreeRatio – définit le pourcentage maximum de tas libres après GC pour éviter de rétrécir.

-XX: MinHeapFreeRatio – définit le pourcentage minimum de tas libres après GC pour éviter l’expansion; pour surveiller l’utilisation du tas, vous pouvez utiliser JCosole.

Activer le partage de données de classe

Spécifiez l’option Xshareclasses pour activer le partage de données de classe dans un cache de classe partagé. La machine virtuelle Java se connecte à un cache existant ou crée un cache s’il n’en existe pas. Vous pouvez avoir plusieurs caches et vous pouvez spécifier le cache correct en ajoutant une sous-option à l’option -Xshareclasses.

Taille PermGen

Les options JVM antérieures définissent la taille de la mémoire de tas, mais -XX: PermSize consiste à définir la taille de l’espace PermGen, où le pool de chaînes et les métadonnées de classe sont enregistrés. Cette option est particulièrement efficace pour un serveur Web comme Tomcat, qui charge souvent des classes de l’application Web lors du déploiement.

Soit dit en passant, il convient de noter que l’espace PermGen est pris en charge par Metaspace dans Java 8, et cette option n’est pas applicable si vous exécutez avec JRE 8 JVM.

Imprimer GC

-verbeux: gc – enregistre les exécutions du ramasse-miettes et leur durée.
-XX: + PrintGCDetails – inclut les données de -verbose: gc mais ajoute également des informations sur la taille de la nouvelle génération et des timings plus précis.
-XX: -PrintGCTimeStamps – Imprimer des horodatages lors de la collecte des ordures.

Ces options JVM sont utilisées pour activer la journalisation de la récupération de place, ce qui est très efficace pour l’opération sensible à la latence. Nous avions l’habitude d’être sur des systèmes où nous recherchons des latences microsecondes, et si vous reconnaissez, une grosse collecte de déchets peut durer plusieurs millisecondes.

Donc, nous optons pour une architecture sans GC comme le disjoncteur LMAX, mais en effet, si vous ne choisissez pas une application sensible à la latence, cette option pratique vous informera des statistiques GC importantes. Il vous indiquera s’il s’agit d’un ramasse-miettes important ou mineur, quel type de ramasse-miettes est appliqué, à quelle fréquence la mémoire est restaurée et combien de temps elle a tenu, etc..

Gestion de l’erreur «OutOfMemory»

Pour déclencher le vidage de segment de mémoire, vous pouvez utiliser -XX: + HeapDumpOnOutOfMemoryError

Cette option JVM produit un vidage de pile lorsque votre JVM meurt avec une erreur OutOfMemory. Il n’y a aucune dépense à moins qu’un MOO ne se produise réellement. Ce drapeau est une condition requise pour les systèmes de production car il est généralement le seul moyen de déterminer le problème en profondeur.

Le vidage de tas sera configuré par défaut dans le “répertoire courant” de la JVM. Si vous souhaitez créer des vidages de tas sur un répertoire spécifique, exécutez

-XX: HeapDumpPath = [chemin d’accès au répertoire de vidage de tas]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

Le fichier de vidage de tas peut être de grande taille, jusqu’à gigaoctets, assurez-vous donc que le système de fichiers cible permet une capacité suffisante.

Si nous voulons redémarrer le serveur immédiatement après une panne de mémoire, nous pouvons définir ce paramètre dans le même but –

XX: OnOutOfMemoryError ="shutdown -r"

Tracez le chargement et le déchargement de classe

-XX: + TraceClassLoading et -XX: + TraceClassUnloading sont deux options JVM que nous utilisons pour imprimer les informations de journalisation lorsque les classes se chargent dans la JVM ou se déchargent de la JVM. Ces indicateurs JVM sont utiles si vous avez un type de fuite de mémoire lié au chargeur de classe et que vous soupçonnez que les classes ne déchargent pas ou ne récupèrent pas les ordures.

Chemin de classe Java

Parler de JAVA Classpath then-Xbootclasspath spécifie les entrées de chemin de classe que nous voulons charger sans vérification. La machine virtuelle Java vérifie toutes les classes qu’elle charge pour s’assurer qu’elle n’essaie pas de déréférencer un objet avec un entier d’entrées supplémentaires hors de la pile ou d’en pousser trop, etc.. 

Mettre la classe sur le bootclasspath ignore également le coût, mais ne doit être utilisé que si vous savez que les classes ont été vérifiées plusieurs fois auparavant. Dans JRuby, ce temps de démarrage réduit de moitié et plus pour un script simple.

Profilage

Le profilage Java est le processus de surveillance de divers paramètres de niveaux JVM tels que les exécutions de méthodes, les exécutions de threads, les récupérations de mémoire et les créations d’objets. Le profilage Java vous offre également une vue plus précise de l’exécution de votre application cible et de son utilisation des ressources..

-Xprof
-Xrunhprof

Environnement 64 bits

Dans l’environnement du système d’exploitation où les packages 32 et 64 bits sont installés, la JVM choisit automatiquement les packages environnementaux 32 bits par défaut.

Si nous voulons définir l’environnement sur 64 bits manuellement, nous pouvons le faire en utilisant le paramètre -d. Et évidemment, le bit OS peut être 32 ou 64.

Conclusion

J’espère que cela vous aide à configurer les paramètres JVM pour votre application. Si vous souhaitez en savoir plus sur la gestion de la mémoire java, consultez ce Cours Udemy.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map