Wie kann ich die Größe des Java-Heapspeichers und den verwendeten Speicher ermitteln (Linux)?
Lesezeit: 6 Minuten
Jaspis
Wie kann ich die Heap-Größe (und den verwendeten Speicher) einer Java-Anwendung unter Linux über die Befehlszeile überprüfen?
Ich habe es über jmap versucht. Aber es gibt Informationen über interne Speicherbereiche wie Eden, PermGen usw., die für mich nicht nützlich sind.
Ich suche so etwas wie:
Maximaler Speicher: 1 GB
Mindestspeicher: 256 MB
Heap-Speicher: 700 MB
Verwendeter Speicher: 460 MB
Das ist alles. Ich weiß, dass ich das sehen kann JConsoleusw., aber ich muss es über die Befehlszeile tun (ich kann es nicht aktivieren JMXusw.)
Bauer1992
Jeder Java-Prozess verfügt über eine piddie Sie zunächst mit dem finden müssen jps Befehl.
Sobald Sie die PID haben, können Sie sie verwenden jstat -gc [insert-pid-here] um Statistiken über das Verhalten des Garbage-Collected-Heaps zu finden.
jstat -gccapacity [insert-pid-here] präsentiert Informationen über die Speicherpoolgenerierung und die Speicherplatzmöglichkeiten.
jstat -gcutil [insert-pid-here] stellt die Auslastung jeder Generation als Prozentsatz ihrer Kapazität dar. Nützlich, um auf einen Blick einen Überblick über die Nutzung zu erhalten.
Gibt es eine Empfehlung, welche Optionen von jstat sollte man verwenden, um nur die Gesamtspeichernutzung einer JVM zu überprüfen? Nehmen wir an, Sie starten die JVM mit Xms=4g Und Xmx=4g und Sie möchten sehen, wie viel Speicher davon bereits verwendet wird?
– basZero
5. Februar 2014 um 9:44
„jstat -gcutil 250 N“ war sehr nützlich, um N Stichproben in 250-ms-Intervallen zu erfassen und die Ausgabe als Prozentsätze für die entsprechenden Leerzeichen anzuzeigen. Danke.
– Kerem
14. März 2015 um 1:57
Bemerkenswertes Zitat von jstat Oracle Java 8-Handbuch Buchseite: This command is experimental and unsupported.
– patryk.beza
19. Mai 2015 um 20:20 Uhr
awk 'print {$3+$4+$6+$8}' kann eine zusammengefasste Nutzung der JSTAT-Spalten von Java 8 drucken
– Cybersoft
1. Februar 2017 um 17:37 Uhr
oder awk 'NR>1 {print $3+$4+$6+$8}' um die erste Zeile mit Spaltentiteln zu überspringen
– Arberg
4. September 2019 um 9:51 Uhr
Atma
Dieser Befehl zeigt die konfigurierten Heap-Größen in Bytes an.
Dies beantwortet nicht die Frage, bei der speziell gefragt wird, wie die Heap-Nutzung eines Prozesses überprüft werden soll. Der Befehl hier listet JVM-Standardwerte für alle Prozesse auf.
– Madbreaks
30. November 2016 um 17:10 Uhr
Für mich ist es jedoch eine sehr hilfreiche Antwort, wenn ich über die Google-Suche auf diese Seite komme, um die globale Heap-Größe zu ermitteln.
– Johan
25. Januar 2018 um 13:53
@jumping_monkey nicht indirekt, falsch. Wenn das, was Sie sagen, wahr ist, sollte die Antwort bearbeitet werden oder Sie können gerne eine neue Antwort hinzufügen.
– Madbreaks
20. Dezember 2019 um 17:58
Der Titel der ersten Frage ist so mehrdeutig, dass dies eine aufgelistete Antwort bleiben sollte. Darüber hinaus ist es die am besten auf Google zu findende Antwort auf die Konfigurationsfrage.
– John Haberstroh
9. Juni 2021 um 17:46 Uhr
MRalwasser
jvmtop ist ein Befehlszeilentool, das eine Live-Ansicht verschiedener Metriken, einschließlich Heap, bietet.
Beispielausgabe des VM-Übersichtsmodus:
JvmTop 0.3 alpha (expect bugs) amd64 8 cpus, Linux 2.6.32-27, load avg 0.12
http://code.google.com/p/jvmtop
PID MAIN-CLASS HPCUR HPMAX NHCUR NHMAX CPU GC VM USERNAME #T DL
3370 rapperSimpleApp 165m 455m 109m 176m 0.12% 0.00% S6U37 web 21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager 11m 28m 23m 130m 0.00% 0.00% S6U37 web 31
19187 m.jvmtop.JvmTop 20m 3544m 13m 130m 0.93% 0.47% S6U37 web 20
16733 artup.Bootstrap 159m 455m 166m 304m 0.12% 0.00% S6U37 web 46
Es ist in der Tat ein großartiges Tool, eine Art htop, aber mit Metriken von jstat. Danke für den Vorschlag, @MRalwasser.
– oski86
6. Mai 2015 um 20:28
Funktioniert aufgrund der tools.jar-Abhängigkeit nur bis Java 8
– cdalxndr
21. Januar 2021 um 19:00 Uhr
Padippist
Versuchen Sie Folgendes, es hat in Ubuntu und RedHat funktioniert:
Um die Größe in MB zu ermitteln, dividieren Sie den Wert durch (1024*1024).
Ohne die Verwendung von JMX, was die meisten Tools verwenden, können Sie nur JMX verwenden
jps -lvm
und schließen Sie daraus, dass die Einstellungen aus den Befehlszeilenoptionen stammen.
Ohne JMX können Sie standardmäßig keine dynamischen Informationen abrufen, Sie könnten jedoch Ihren eigenen Dienst schreiben, um dies zu tun.
Übrigens: Ich verwende lieber VisualVM als JConsole.
Andrejs
Es gibt ein Befehlszeilentool mit visuellem Aspekt – jvm-mon. Es handelt sich um ein JVM-Überwachungstool für die Befehlszeile, das Folgendes anzeigt:
Heap-Nutzung, Größe und max
JVM-Prozesse
CPU- und GC-Nutzung
Top-Threads
Die Metriken und Diagramme werden aktualisiert, während das Tool geöffnet ist.
Probe:
Priyantha
Aus Java8 und höherkönnen Sie den folgenden Befehl verwenden:
jcmd JAVA_PROCESS_ID GC.heap_info
Sie können sich auf die Summe, den gesamten und den verwendeten Speicher aus der Ausgabe beziehen.
Beispielbefehl und -ausgabe: jcmd 9758 GC.heap_info PSYoungGen insgesamt 1579520K, verwendet 487543K [0x0000000751d80000, 0x00000007c0000000, 0x00000007c0000000)
eden space 1354240K, 36% used [0x0000000751d80000,0x000000076f99dc40,0x00000007a4800000)
from space 225280K, 0% used [0x00000007b2400000,0x00000007b2400000,0x00000007c0000000)
to space 225280K, 0% used [0x00000007a4800000,0x00000007a4800000,0x00000007b2400000)
ParOldGen total 3610112K, used 0K [0x0000000675800000, 0x0000000751d80000, 0x0000000751d80000)
object space 3610112K, 0% used [0x0000000675800000,0x0000000675800000,0x0000000751d80000)
Metaspace used 16292K, capacity 16582K, committed 16896K, reserved 1064960K
class space used 1823K, capacity 1936K, committed 2048K, reserved 1048576K
You need to correct your comment. GC.heap_info is available in Java 9 and above. It’s not available in the Java 8. See another thread here: stackoverflow.com/questions/41891127/…
– Pavel Molchanov
Mar 7, 2019 at 23:01
@PavelMolchanov I am able to use the command in jdk1.8.0_172. /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home/bin/jcmd 98270 GC.heap_info. Please if you may, Add the info to referred thread as well as I don’t have enough reputation as of now to add a comment there.
One more question. Please check JDK version that is running process 98270 in your example. jcmd gets available commands from JVM of the process (in your case 98270). If process 98270 process is executed with different JDK (JDK 9 or above), you will see GC.heap_info command available even in JCMD itself is from Java 8. Available commands may be different for different processes. To get available commands execute: jcmp <PID> help.
– Pavel Molchanov
Mar 19, 2019 at 15:24
FWIW, GC.heap_info is definitely available in OpenJDK 8 also. Maybe only in recent versions? I am using this one: 8u191-b12-2ubuntu0.18.04.1
– Per Lundberg
Sep 25, 2019 at 10:30
14543800cookie-checkWie kann ich die Größe des Java-Heapspeichers und den verwendeten Speicher ermitteln (Linux)?yes