In Entwicklung Letztes Updateated:
Teilen:
Cloudways bietet verwaltetes Cloud-Hosting für Unternehmen jeder Größe zum Hosten einer Website oder komplexer Webanwendungen.

Lernen Sie wichtige JVM-Optionen (Java Virtual Machine) für eine bessere Leistung und ein besseres Debugging kennen.

If you are a Java Entwickler Wenn Sie ein Middleware-Administrator sind, sollten Sie wissen, was JVM-Optionen zusammen mit ihrer Bedeutung bedeuten und wie sie sich auf Ihre Anwendung auswirken. Lassen Sie uns sie herausfinden.

Übersicht über die JVM-Optionen

Wenn Sie über JVM-Optionen sprechen, gibt es drei Arten von Optionen, die Sie in Ihre JVM aufnehmen können: Standard-, Nicht-Standard- und erweiterte Optionen. Wenn Sie eine erweiterte Option ausprobieren, verwenden Sie die Option immer mit -XX . Wenn Sie eine nicht standardmäßige Option anwenden, verwenden Sie diese ebenfalls -X . Standardoptionen stellen der Option nichts voran.

Welche JVM-Optionen werden von Ihrer Anwendung verwendet?

Wenn die Anwendung unter Linux ausgeführt wird, können Sie verwenden 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.

Wenn Ihr Argument zu lang ist, versuchen Sie es mit ps -auxww da dieser Befehl auch eine lange Argumentliste anzeigt.

Nachdem Sie eine Liste der JVM-Flags erstellt haben, können Sie sich ein Bild über das Verhalten jeder Java-Anwendung machen, z. B. Tomcat.

Java-Heap-Größe

 -Xms- Legen Sie die anfängliche Java-Heap-Größe fest
 -Xmx- Legen Sie die maximale Java-Heap-Größe fest
 -Xss- Legen Sie die Größe des Java-Thread-Stapels fest

-Xms - Diese Option dient zum Definieren der Startheapgröße für JVM, z.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 - Diese Option dient zum Definieren der maximalen Heap-Größe von JVM, z.Xmx2048m Dies bedeutet, dass die maximale Heap-Größe von JVM nur 2 GB beträgt.

You will essentially immer haben-Xmsund -Xmx perfekter Harmonie.

Legen Sie den Prozentsatz des Heaps fest

-XX: MaxHeapFreeRatio - Legt den maximalen Prozentsatz an freiem Haufen nach der GC fest, um ein Schrumpfen zu vermeiden.

-XX: MinHeapFreeRatio - legt den Mindestprozentsatz an freiem Heap nach GC fest, um eine Expansion zu vermeiden; Um die Heap-Nutzung zu überwachen, können Sie JCosole verwenden.

Aktivieren Sie die gemeinsame Nutzung von Klassendaten

Angeben 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 .

PermGen-Größe

Frühere JVM-Optionen definieren aber die Größe des Heapspeichers -XX:PermSize definiert die Größe des PermGen-Speicherplatzes, in dem der Zeichenfolgenpool und die Klassenmetadaten gespeichert werden. Diese Option ist besonders effektiv für einen Webserver wie Tomcat, der während der Bereitstellung häufig Klassen der Webanwendung lädt.

Übrigens ist es wichtig zu wissen, dass der PermGen-Speicherplatz von Metaspace in Java 8 übernommen wird. Diese Option ist nicht anwendbar, wenn Sie mit JRE 8 JVM ausgeführt werden.

GC drucken

-verbose: gc - protokolliert die Ausführung des Garbage Collectors und wie lange sie dauern. 
-XX: + PrintGCDetails - includes the data from -verbose:gc but also adds information about the size of the new generation and more accurate Zeitpunkte.
-XX: -PrintGCTimeStamps - Drucken Sie Zeitstempel bei der Speicherbereinigung.

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.

Behandlung des „OutOfMemory“-Fehlers

Sie können verwenden, um einen Heap-Dump für nicht genügend Speicher auszulösen -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 >"

Die Heap-Dump-Datei kann bis zu Gigabyte groß sein. Stellen Sie daher sicher, dass das Zieldateisystem eine ausreichende Kapazität zulässt.

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"

Verfolgen Sie das Laden und Entladen von Klassen

-XX:+TraceClassLoading und -XX:+TraceClassUnloading sind zwei JVM-Optionen, mit denen wir Protokollinformationen drucken, wenn Klassen in JVM geladen oder aus JVM entladen werden. Diese JVM-Flags sind nützlich, wenn mit dem Klassenladeprogramm ein Speicherverlust verbunden ist und der Verdacht besteht, dass Klassen nicht entladen oder Müll gesammelt werden.

Java-Klassenpfad

Apropos JAVA Classpath-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. 

Wenn Sie eine Klasse in den Bootklassenpfad einfügen, werden die Kosten ebenfalls übersprungen, sie sollten jedoch nur verwendet werden, wenn Sie wissen, dass die Klassen bereits mehrfach überprüft wurden. In JRuby reduzierte dies die Startzeit für ein einfaches Skript um die Hälfte und mehr.

ProfiLeng

Javac 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

64-bit Umwelt

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 kann entweder 32 oder 64 sein.

Fazit

Ich hoffe, dies hilft Ihnen bei der Konfiguration von JVM-Parametern für Ihre Anwendung. Wenn Sie mehr über die Java-Speicherverwaltung erfahren möchten, lesen Sie diese Informationen Udemy natürlich.

Teilen:
  • Redaktion
    Autor
    Ein Expertenteam von Geekflare ist Leidenschaftatesehr engagiertated zum Teilen umsetzbarer Inhalte, zur Bereitstellung von Erkenntnissen und zur Bereitstellung maßgeschneiderter Ratschläge, um Einzelpersonen und Unternehmen dabei zu helfen, in einer digitalen Welt erfolgreich zu sein.

Danke an unsere Sponsoren

Weitere großartige Lektüre zum Thema Entwicklung

Treiben Sie Ihr Geschäft an

Einige der Tools und Services, die Ihrem Unternehmen helfen grow.