Gibt es eine Möglichkeit, die Parameter einer laufenden JVM abzurufen? Gibt es ein Befehlszeilenprogramm wie jstat, das die PID der JVM als Eingabe verwendet und ihre Startparameter zurückgibt? Ich interessiere mich besonders für die Werte -Xmx und -Xms, die beim Starten der JVM angegeben wurden. Danke dir.
Bearbeiten : Um meine Einschränkungen zu klären. Die JVM, die wir überprüfen möchten, wird auf einem Produktionsserver ausgeführt. Deshalb bevorzugen wir die minimale Störung. Wir können die JVM mit jstat überwachen und hoffen, dass es eine ähnlich einfache Lösung für den Zugriff auf die Parameter gibt.
Bearbeiten : Wir haben auch versucht, die Parameter mit jvisualvm abzurufen. Um jedoch eine Verbindung zu einer Remote-JVM herzustellen, müssen Sie JSTATD ausführen und die Sicherheitseinstellungen der JVM ändern, die auf einem Produktionsserver als sehr störend und riskant eingestuft wurden.
Antworten:
Sie können jps wie verwenden
druckt so etwas wie
quelle
jps -lvm
möglicherweise irreführend ist. Überprüfen Sie dies immer mit jinfo oder einem anderen Tool. Das Problem kann sein, wenn "-XX" wie das normale Programmargument übergeben und von JVM ignoriert wird. Dies ist der Fall, wenn Siejava -jar my.jar -Xmx3g
anstelle vonjava -Xmx3g -jar my.jar
Ich füge diese neue Antwort hinzu, da gemäß der JDK8-Dokumentation jcmd jetzt als Ansatz vorgeschlagen wird.
Unten finden Sie Befehle, um Ihre gewünschten Eigenschaften / Flags abzurufen.
Wir brauchen pid, für diese Verwendung jcmd -l, wie unten
Jetzt ist es Zeit, diese Pids zu verwenden, um die gewünschten Eigenschaften / Flags zu erhalten
Befehl: jcmd 11441 VM.system_properties
Befehl: jcmd 11441 VM.flags Ausgabe:
Weitere Anweisungen zur Verwendung von jcmd finden Sie in meinem Blogbeitrag
quelle
Unter Linux:
Unter Mac OSX:
Unter Windows:
Quelle: https://www.mkyong.com/java/find-out-your-java-heap-memory-size/
quelle
Alternativ können Sie jinfo verwenden
quelle
-flags
Option existiert nicht in OpenJDK 64-Bit-Server-VM (Build 1.8.0_111-intern-alpin-r0-b14) (aktuellesjava:8u111-jdk-alpine
Docker-Image)flags
funktioniert aber mit dem offiziellen Docker-Java-Image basierend auf Debian Jessiedocker run --rm -it java:8u111-jdk java -version && jinfo -h
Wenn Sie dies in Java tun können, versuchen Sie:
RuntimeMXBean
ManagementFactory
Beispiel:
quelle
JConsole kann es schaffen. Sie können auch ein leistungsstarkes jvisualVM-Tool verwenden, das seit 1.6.0.8 auch in JDK enthalten ist.
quelle
Windows 10 oder Windows Server 2016 stellen solche Informationen in ihrem Standard-Task-Manager bereit. Ein seltener Fall für die Produktion, aber wenn die Ziel-JVM unter Windows ausgeführt wird, können Sie die Parameter am einfachsten anzeigen, indem Sie Strg + Alt + Entf drücken, die Registerkarte Prozesse auswählen und die Befehlszeilenspalte hinzufügen (indem Sie mit der rechten Maustaste darauf klicken eine vorhandene Spaltenüberschrift).
quelle
Wenn Sie daran interessiert sind, die JVM-Parameter eines laufenden Java-Prozesses abzurufen, töten Sie einfach -3 java-pid. Sie erhalten eine Core-Dump-Datei, in der Sie die beim Starten der Java-Anwendung verwendeten JVM-Parameter finden.
quelle
Unter Linux können Sie diesen Befehl ausführen und das Ergebnis anzeigen:
quelle
Sie können den JConsole-Befehl (oder einen anderen JMX-Client) verwenden, um auf diese Informationen zuzugreifen.
quelle
Diese Technik gilt für alle Java-Anwendungen, die lokal oder remote ausgeführt werden.
jvisualvm ist seit JDK 6 Update 7 in jedem JDK zu finden. Das Video-Tutorial zu jvisualvm finden Sie hier.
quelle
_JAVA_OPTIONS ist eine env-Variable, die erweitert werden kann.
quelle