Tuesday, 21. November 2017, 05:59

Menü
myStartpage
myCoding
- IVTVHopper Java
- WarpChat
- SSHGate
- Update Notifier
- FTP Uploader
- JPerfmon
myHowtos
myRCPlanes
myRobots
myZitate
myImpressum
myStarter
myPics
JPerfmon

JPerfmon ist ein alternatives Performance Monitoring Tool für die Sun JVM. Der große Vorteil dieses Tools ist, dass man sich seine Ansicht quasi dynamisch zusammenstellen kann.
Man muss neben dem jar File ein "lib" Directory erstellen und die tools.jar vom jeweiligen Java (OS spezifisch) hinterlegen.

Zur Zeit sind bereits folgende Views verfügbar:

all|runtime|classloading|compilation|garbage|heap
|nonheap|memorypool|os|threads|threaddump|csv|info|mem|perf|tenuring

All diese Views können kombiniert werden. Dazu kann man den -Dmode Parameter setzen und dabei mit "," getrennt alle Views die man sehen möchte aufzählen. z.B. -Dmode=heap,nonheap gibt folgendes aus:

HU: 36998k HF: 94073k HC: 131072k HM: 2095054k
-------------------------------------------
NHU: 23715k NHF: 1909k NHC: 25624k NHM: 136314k
-------------------------------------------
Hier sieht man also
HeapUsage, HeapFree, HeapCommitted, HeapMax
NonHeapUsage, NonHeapFree, NonHeapCommitted, NonHeapMax

Folgende Views sind kombiniert:

info = runtime,os
mem = garbage,memorypool,heap,nonheap
perf = garbage,memorypool,classloading,compilation,threads,tenured

csv ist eine besondere View die dazu verwendet werden kann Daten in z.B. Calc oder ähnliches zu importieren und danach Auswertungen durchzuführen. Die Einträge werden durch Semikolons getrennt und haben die folgende Form:

HeapInit;HeapMax;HeapCommitted;HeapUsed;
NonHeapInit;NonHeapMax;NonHeapCommitted;NonHeapUsed;
ClassTotal;ClassCurr;ClassUnload;
CompTime;garbagename;memoryname;
TenuringThreshold;MaxTenuringThreshold;GcCause;
ThreadCount;TotalThread;PeakThread

Hier ein Screenshot einer Beispielauswertung aus LibreOffice Calc:

 

Weiters kann man bestimmen wie oft hintereinander die Metriken abgetastet werden und auch mit welcher Abtastrate.

java -Dpid=$int [-Dtimestamp=$boolean -Drepeat=$int -Dwait=$int -Dmode=
[all|runtime|classloading|compilation|garbage|heap|nonheap|
memorypool|os|threads|threaddump|csv|info|mem|perf|tenured]] -jar ./JPerfMon-combined.jar

Als Beispiel:
java -Dpid=12345 -Dwait=1000 -Drepeat=20 -Dmode=classloading,compilation -jar ./JPerfMon.jar

Gibt 20 mal hintereinander mit einem Abstand von 1 sek (wait wird in Millisekunden angegeben) die Classloader und die Compilation Statistik von dem Prozess mit der ProcessID 12345 aus. Selbstverständlich muss der Prozess ein Java Prozess sein.

Wichtig ist noch, dass dieses Tool erstens nur mit einem Sun JDK funktioniert und das zweitens die tools.jar aus eurem lib Verzeichnis im Classpath enthalten ist. Alternativ kann man sich mit Ant ein Combined Jar bauen, welches die tools.jar bereits enthält. Dazu werde ich demnächst auch ein HowTo verfassen.

Download

SourceCode

Hier noch ein Ausschnitt aus der Ausgabe mit mode=all:

----==== Runtime Monitoring ====----
ClassPath=warpchat.jar
InputArguments=
-XX:+UseG1GC
LibraryPath=/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
ManagementSpecVersion=1.2
Name=18455@jaqueline
SpecName=Java Virtual Machine Specification
SpecVendor=Sun Microsystems Inc.
SpecVersion=1.0
StartTime=01/23/2012 08:21:04
SystemProperties={java.vm.version=20.1-b02, java.vendor.url=http://java.sun.com/, sun.jnu.encoding=UTF-8, java.vm.info=mixed mode, user.dir=/home/gateway, sun.cpu.isalist=, java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment, .....
VMSpec=Java HotSpot(TM) 64-Bit Server VM Sun Microsystems Inc. 20.1-b02

----==== Class Loading Monitoring ====----
CurLoaded: 2667 Unloaded: 0 Loaded: 2667

----==== Compilation Monitoring ====----
Total Compilation Time: 1.117s

----==== Garbage Collection Monitoring ====----
[G1 Old Generation: Count=0 GCTime=0,0000sec Average=0ms]
[G1 Young Generation: Count=3 GCTime=0,0470sec Average=15ms]

----==== Heap Monitoring ====----
HU: 28610k HF: 102461k HC: 131072k HM: 2095054k

----==== Non Heap Monitoring ====----
NHU: 23613k NHF: 2011k NHC: 25624k NHM: 136314k

----==== Memory Pool Monitoring ====----
[G1 Old Gen: Used=4493k Committed=106954k Utilization=4.2%]
[G1 Survivor: Used=1048k Committed=1048k Utilization=100.0%]
[G1 Perm Gen: Used=22605k Committed=23068k Utilization=97.99%]
[Code Cache: Used=1013k Committed=2555k Utilization=39.66%]
[G1 Eden: Used=24117k Committed=24117k Utilization=100.0%]

----==== OS Monitoring ====----
Arch=amd64
AvailableProcessors=4
OSName=Linux 2.6.38-13-generic
Load Average=0.03

----==== Thread Monitoring ====----
ThreadCount=20
PeakThreadCount=25
TotalStartedThreadCount=36

----==== Thread Dump ====----
Name=JMX server connection timeout 46
java.lang.Object.wait(Native Method)
com.sun.jmx.remote.internal.ServerC...
java.lang.Thread.run(Thread.java:662)
State=TIMED_WAITING

Name=RMI TCP Connection(8)-127.0.0.1
sun.management.ThreadImpl.dumpThreads0(Native Method)
sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:433)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:167)

Websitebaker is Free Software released under the GNU/GPL License. - design by masterhomepage.ch