In Développement Dernière mise à jourated:
Partager sur:
Cloudways propose un hébergement cloud géré aux entreprises de toutes tailles pour héberger un site Web ou des applications Web complexes.

Découvrez les principales options JVM (Java Virtual Machine) pour de meilleures performances et un meilleur débogage.

Si vous êtes Développeur Java ou administrateur middleware, vous devez alors savoir ce que signifient les options JVM, leur importance et leur impact sur votre application. Découvrons-les.

Présentation des options JVM

En ce qui concerne les options JVM, il existe trois types d'options que vous pouvez inclure dans votre JVM: 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 préfèrent 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  to identify the Java process and look at the JVM options printed as process arguments. If more than one Java process is going on the system, then you may require to go with a keyword that is unique to your Java application.

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

Après avoir dressé 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 permet de définir la taille du tas de départ pour JVM, par exemple,Xms2048m which means an initial heap size of JVM is 2 GB around. So, when a JVM starts, the heap memory will be this much big. Surprisingly yes! This is carried to prevent resizing during startup and enhance the startup time of JVM.

-Xmx - Cette option permet de définir la taille maximale du tas de JVM, par exemple,Xmx2048m ce qui signifie que la taille maximale du tas de JVM sera de 2 Go uniquement.

You will essentially toujours avoir-Xmset-Xmx ensemble.

Définir le pourcentage du tas

-XX: MaxHeapFreeRatio - définit le pourcentage maximum de tas libre après GC pour éviter la réduction.

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

Activer le partage des données de classe

Spécifier Xshareclasses option to enable class data sharing in a shared class cache. The JVM connects to an existing cache or creates a cache if one does not exist. You can have multiple caches, and you can specify the correct cache by adding a suboption to the -Xshareclasses option.

Taille PermGen

Les options JVM antérieures définissent la taille de la mémoire du 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.

À propos, il convient de savoir 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 CG

-verbose: gc - enregistre les exécutions du garbage collector et leur durée. 
-XX: + ImprimerGCDétails - includes the data from -verbose:gc but also adds information about the size of the new generation and more accurate horaires.
-XX: -ImprimerGCTimeStamps - Imprimer les horodatages lors de la collecte des ordures.

These JVM options are used to enable the garbage collection logging, which is highly effective for the latency-sensitive operation. We used to be on systems where we seek for microsecond latencies, and if you recognize, a big garbage collection can last several milliseconds.

So, we go for GC free architecture like LMAX disruptor, but indeed if you are not going for ultra latency-sensitive application, this handy option will advise you important GC statistics. It will get you whether it’s big or minor garbage collection, which kind of garbage collector is applied, how often memory is restored, and how much time it held, etc.

Gestion de l'erreur 'OutOfMemory'

Pour déclencher un vidage de tas en cas de mémoire insuffisante, vous pouvez utiliser -XX:+HeapDumpOnOutOfMemoryError

This JVM option produces a stack dump when your JVM dies with OutOfMemory Error. There is no expense involved unless an OOM really occurs. This flag is a requisite for production systems as it is usually the only way to determine the problem deeply.

The heap dump will be set up in the “current directory” of the JVM by default. If you wish to create heap dumps on specific directory, then run

-XX:HeapDumpPath= [path-to-heap-dump-directory]
-XX:+UseGCOverheadLimit
-XX:OnOutOfMemoryError="< cmd args >;< cmd args >"

Le fichier de vidage de tas peut être énorme, jusqu'à gigaoctets, alors assurez-vous que le système de fichiers cible autorise une capacité suffisante.

If we want to restart the server immediately after out of memory occur, then we can set this parameter of the same purpose –

XX:OnOutOfMemoryError="shutdown -r"

Tracer le chargement et le déchargement des classes

-XX:+TraceClassLoading et -XX:+TraceClassUnloading sont deux options JVM que nous utilisons pour imprimer les informations de journalisation chaque fois que les classes se chargent dans JVM ou se déchargent de 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 sont pas en cours de déchargement ou de récupération de place.

Chemin de classe Java

Parler de JAVA Classpath alors-Xbootclasspath specifies classpath entries we want loaded without verification. The JVM verifies all classes it loads to ensure that it don’t try to dereference an object with an int, pop of extra entries off the stack or push too many, and so on. 

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

Profilingue

Java Profiling is the process of monitoring various JVM levels parameters such as Method Executions, Thread Executions, Garbage Collections, and Object Creations. Java Profiling provides you with a finer view of your target application execution and its resource utilization, as well.

-Xprof 
-Xrunhprof

Séries 64-bit sûr, heureux et sain

In the OS environment where both 32 and 64-bit packages are installed, the JVM automatically chooses 32-bit environmental packages as default.

If we want to set the environment to 64 bit manually, we can do so using -d<OS bit> parameter. And obviously, the OS bit peut être 32 ou 64.

Conclusion

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

Partager sur:
  • Equipe de rédaction
    Auteur
    Une équipe d'experts à Geekflare c'est la passionately dévouéated au partage de contenu exploitable, à l'offre d'informations et à la fourniture de conseils personnalisés pour aider les particuliers et les entreprises à prospérer dans un monde numérique.

Merci à nos commanditaires

Plus de bonnes lectures sur le développement

Alimentez votre entreprise

Certains des outils et services pour aider votre entreprise grow.
  • L'outil de synthèse vocale qui utilise l'IA pour générerate des voix humaines réalistes.

    Essayez Murf AI
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.

    Essayez Brightdata
  • Monday.com est un système d'exploitation de travail tout-en-un pour vous aider à gérer les projets, les tâches, le travail, les ventes, le CRM, les opérations, workflowset plus encore.

    Essayez Monday
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.

    Essayez Intruder