Kann ich die Heap-Nutzung einer laufenden JVM von der Kommandozeile aus überprüfen, meine ich die tatsächliche Nutzung und nicht den mit Xmx zugewiesenen Höchstbetrag.
Ich brauche es als Kommandozeile, weil ich keinen Zugriff auf eine Windowing-Umgebung habe und ein Skript basierend auf dem Wert möchte, dass die Anwendung auf dem Jetty Application Server ausgeführt wird
Sie können jstat verwenden, wie:
jstat -gc pid
Vollständige Dokumente hier: http://docs.Oracle.com/javase/7/docs/technotes/tools/share/jstat.html
Für Java 8 können Sie die folgende Befehlszeile verwenden, um die Heap-Speicherauslastung in kB abzurufen:
jstat -gc <PID> | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]; print sum}'
Der Befehl fasst im Wesentlichen zusammen:
Möglicherweise möchten Sie auch den Metaspace und die komprimierte Klassenraumnutzung einschließen. In diesem Fall müssen Sie der awk-Summe eine [10] und eine [12] hinzufügen.
Wenn Sie die Ausführung mit gc-Protokollierung starten, erhalten Sie die Informationen zur Datei . Andernfalls erhalten Sie mit jmap -heap das, was Sie möchten . Weitere Informationen finden Sie auf der Seite jmap doc .
Beachten Sie, dass jmap
in einer Produktionsumgebung not nicht verwendet werden sollte, es sei denn, dies ist absolut erforderlich, da das Tool die Anwendung anhält, um die tatsächliche Heap-Nutzung bestimmen zu können. Normalerweise ist dies in einer Produktionsumgebung nicht erwünscht.
Alle Prozedur auf einmal. Basierend auf der Antwort von @Till Schäfer.
In KB ...
jstat -gc $(ps axf | egrep -i "*/bin/Java *" | egrep -v grep | awk '{print $1}') | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]+a[10]+a[12]; print sum}'
In MB ...
jstat -gc $(ps axf | egrep -i "*/bin/Java *" | egrep -v grep | awk '{print $1}') | tail -n 1 | awk '{split($0,a," "); sum=(a[3]+a[4]+a[6]+a[8]+a[10]+a[12])/1024; print sum" MB"}'
"Awk-Summe" Referenz:
a[1] - S0C
a[2] - S1C
a[3] - S0U
a[4] - S1U
a[5] - EC
a[6] - EU
a[7] - OC
a[8] - OU
a[9] - PC
a[10] - PU
a[11] - YGC
a[12] - YGCT
a[13] - FGC
a[14] - FGCT
a[15] - GCT
Vielen Dank!
HINWEIS: Arbeitet mit OpenJDK!
WEITERE FRAGE: Falsche Angaben?
Wenn Sie die Speichernutzung mit dem Befehl ps
überprüfen, werden Sie feststellen, dass der Java-Prozess viel mehr verbraucht.
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |cut -d "" -f2 | cut -d "-" -f1