Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

10 Wichtige JVM-Optionen für das JAVA-Produktionsanwendungssystem

Java-Optionen
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

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  um den Java-Prozess zu identifizieren und die als Prozessargumente gedruckten JVM-Optionen zu betrachten. Wenn mehr als ein Java-Prozess auf dem System ausgeführt wird, müssen Sie möglicherweise ein Schlüsselwort verwenden, das für Ihre Java-Anwendung eindeutig ist.

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 size

 -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 Dies bedeutet, dass eine anfängliche Heap-Größe von JVM etwa 2 GB beträgt. Wenn also eine JVM gestartet wird, ist der Heapspeicher so groß. Überraschenderweise ja! Dies wird durchgeführt, um eine Größenänderung während des Startvorgangs zu verhindern und die Startzeit von JVM zu verlängern.

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

Sie werden im Wesentlichen immer haben-Xmsund -Xmx perfekter Harmonie.

Set Percentage of the heap

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

Enable class data sharing

Angeben Xshareclasses Option zum Aktivieren der gemeinsamen Nutzung von Klassendaten in einem gemeinsam genutzten Klassencache. Die JVM stellt eine Verbindung zu einem vorhandenen Cache her oder erstellt einen Cache, falls keiner vorhanden ist. Sie können mehrere Caches haben und den richtigen Cache angeben, indem Sie dem eine Cache hinzufügen -Xshareclasses .

PermGen Size

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.

Print GC

-verbose: gc - protokolliert die Ausführung des Garbage Collectors und wie lange sie dauern. 
-XX: + PrintGCDetails - enthält die Daten von -verbose: gc, fügt aber auch Informationen über die Größe der neuen Generation und genauere Timings hinzu.
-XX: -PrintGCTimeStamps - Drucken Sie Zeitstempel bei der Speicherbereinigung.

Diese JVM-Optionen werden verwendet, um die Garbage Collection-Protokollierung zu aktivieren, die für den latenzempfindlichen Vorgang sehr effektiv ist. Früher befanden wir uns auf Systemen, auf denen wir nach Latenzen im Mikrosekundenbereich suchen. Wenn Sie erkennen, kann eine große Speicherbereinigung mehrere Millisekunden dauern.

Wir entscheiden uns für eine GC-freie Architektur wie den LMAX-Disruptor. Wenn Sie sich jedoch nicht für eine Anwendung mit extrem hoher Latenzzeit entscheiden, empfiehlt Ihnen diese praktische Option wichtige GC-Statistiken. Sie erfahren, ob es sich um eine große oder eine kleine Speicherbereinigung handelt, welche Art von Speicherbereinigung angewendet wird, wie oft Speicher wiederhergestellt wird und wie viel Zeit er gespeichert hat usw.

Handling ‘OutOfMemory’ Error

Sie können verwenden, um einen Heap-Dump für nicht genügend Speicher auszulösen -XX:+HeapDumpOnOutOfMemoryError

Diese JVM-Option erzeugt einen Stapelspeicherauszug, wenn Ihre JVM mit OutOfMemory-Fehler stirbt. Es fallen keine Kosten an, es sei denn, ein OOM tritt tatsächlich auf. Dieses Flag ist eine Voraussetzung für Produktionssysteme, da es normalerweise die einzige Möglichkeit ist, das Problem genau zu bestimmen.

Der Heap-Dump wird standardmäßig im „aktuellen Verzeichnis“ der JVM eingerichtet. Wenn Sie Heap-Dumps für ein bestimmtes Verzeichnis erstellen möchten, führen Sie diese aus

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

Wenn wir den Server sofort nach Auftreten von Speichermangel neu starten möchten, können wir diesen Parameter für denselben Zweck festlegen -

XX:OnOutOfMemoryError="shutdown -r"

Trace classloading and unloading

-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 classpath

Apropos JAVA Classpath-Xbootclasspath Gibt Klassenpfadeinträge an, die ohne Überprüfung geladen werden sollen. Die JVM überprüft alle Klassen, die sie lädt, um sicherzustellen, dass sie nicht versucht, ein Objekt mit einem int zu dereferenzieren, zusätzliche Einträge vom Stapel zu entfernen oder zu viele zu verschieben usw. 

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.

Profiling

Bei der Java-Profilerstellung werden verschiedene Parameter auf JVM-Ebene überwacht, z. B. Methodenausführungen, Thread-Ausführungen, Garbage Collections und Objekterstellungen. Mit Java Profiling erhalten Sie einen genaueren Überblick über die Ausführung Ihrer Zielanwendung und deren Ressourcennutzung.

-Xprof 
-Xrunhprof

64-bit environment

In der Betriebssystemumgebung, in der sowohl 32- als auch 64-Bit-Pakete installiert sind, wählt die JVM automatisch 32-Bit-Umgebungspakete als Standard aus.

Wenn wir die Umgebung manuell auf 64-Bit einstellen möchten, können wir dies mit verwenden -d<OS bit> Parameter. Und natürlich kann das Betriebssystembit entweder 32 oder 64 sein.

Conclusion

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.

Danke an unsere Sponsoren
Weitere großartige Lektüre zum Thema Entwicklung
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder