SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
Java-Anwendungen betreiben mit Durchblick
Vortrag am 22.2.2016
bei der
Java User Group Hamburg (JUG HH)
Tobias@Frech.info / @TobiasFrech
© Tobias@Frech.info JUG HH - 22. Februar 2016 2
Tobias Frech
Java ­ Administrator
© Tobias@Frech.info JUG HH - 22. Februar 2016 3
iJUG e.V.
Interessenverbund der Java User Groups e.V.
http://www.ijug.eu/
JUG Hannover
JUG Hessen
JUG Hamburg (HH)
JUG Kaiserslautern
JUG Karlsruhe
JUG Köln
JUG Mannheim
JUG München
JUG Münster
JUG Ostfalen
JUG Saxony
JUG Stuttgart e.V.
JUG Switzerland
JSUG
Lightweight JUG München
SOUG e.V.
SUG Deutschland e.V.
BED-Con e.V.
DOAG e.V.
JUG Augsburg
JUG Berlin-Brandenburg
JUG Bremen
JUG Darmstadt
JUG Deutschland e.V.
JUG Dortmund
JUG Erlangen–Nürnberg
JUG Euregio Maas-Rhein
JUG Görlitz
© Tobias@Frech.info JUG HH - 22. Februar 2016 4
JUG Veranstaltungen
© Tobias@Frech.info JUG HH - 22. Februar 2016 5
Agenda
● Vortragsziel / Motivation
● Demo-Server Setup
● Vorgehen beim Troubleshooting
● textbasierte Werkzeuge
● GUI: VisualVM
● Thema Lasttests
Fragen sind jederzeit sehr erwünscht!
© Tobias@Frech.info JUG HH - 22. Februar 2016 6
Umfrage
● Server-Administration oder
Troubleshooting ?
● Java-Version (5 oder früher, 6, 7, 8?)
© Tobias@Frech.info JUG HH - 22. Februar 2016 7
Raspberry Pi 2
„Server“-Setup
Browser
JMeter
JBoss/
JVM H2
DVDstore
DVD-Store-Anwendung mit
Fehlersimulation
mit freundlichem Dank an:
http://www.inspectit.eu/
HTTP
SSH
RMI
tobi@fedora (192.168.0.1)
pi@pi (192.168.0.2)
© Tobias@Frech.info JUG HH - 22. Februar 2016 8
Tools für OS-Ressourcen
● CPU: top
● RAM: free
● Disk: df, du
● Prozesse: ps
● Langzeit bzw. nachträglich:
● sar: „Collect, report, or save system activity
information.“
© Tobias@Frech.info JUG HH - 22. Februar 2016 9
JDK Admin-Tools
● Console
● jps
● jinfo
● jstack
● jstat
● jmap
zukünftig:
● jcmd
● GUI
● jconsole
● jvisualvm
https://docs.oracle.com/javase/
8/docs/technotes/tools/
© Tobias@Frech.info JUG HH - 22. Februar 2016 10
JVM Tools – Monitoring und Mgmt.
● jps: listet die verfügbaren JVMs auf
● jinfo: Informationen über Parameter und
JVM-Environment
● jstat: Informationen über Classloading,
Kompilierung und Garbage Collection
● jstack: Liste aller Threads mit
momentaner Aktivität
● jmap: Histogramm und Dump des JVM-
Speichers
© Tobias@Frech.info JUG HH - 22. Februar 2016 11
JVM Tools - Verfügbarkeit
Tool JDK 5 JDK 6 JDK 7
jps ok ok ok
jinfo kein Windows / Linux
Itanium
Windows
eingeschränkt
Windows braucht ggf.
zusätzliche Config
jstat ok ok ok
jstack kein Windows / Linux
Itanium
Windows
eingeschränkt
Windows braucht ggf.
zusätzliche Config
jmap kein Windows / Linux
Itanium
Windows
eingeschränkt
Windows braucht ggf.
zusätzliche Config
© Tobias@Frech.info JUG HH - 22. Februar 2016 12
Performance-Troubleshooting
Analyse OS-
Ressourcen
CPU
RAM
Disk
Prozesse
CPU-Last
Garbage Collection
(GC) Analyse
jstat, jmap
Ursache:
GC?
Threaddump Analyse
jstack, Sampler
nein
ja
nein
Memory-
Anpassung,
GC-Tuning,
Memory-Analyse
(Histogramm,
Dump)
ja
Ursache
bekannt?
Hybride Threaddump Analyse
top -H, jstack
nein
Ursache beheben
oder
kompensierende
Maßnahmen:
externe Systeme,
Locks,
ja
© Tobias@Frech.info JUG HH - 22. Februar 2016 13
Demo
● Anwendung mit JMeter unter Last setzen
und analysieren
© Tobias@Frech.info JUG HH - 22. Februar 2016 14
JVM-Prozesse finden
● jps
● listet die lvmid aller für den ausführenden
Benutzer monitorbaren JVMs auf
● -l für vollen Package-Namen
● -v für JVM-Argumente
● -m für Argumente an die main-Methode
● jcmd
● wie jps, vereint auch alle Funktionen der
anderen Tools und löst diese mittelfristig ab
© Tobias@Frech.info JUG HH - 22. Februar 2016 15
JVM Monitoring – Text basiert
● jstat -option jvmid [Interval]
[Wiederholungen]
● Options:
● class, compiler, gc, gccapacity, gccause,
gcnew, gcnewcapacity, gcold, gcoldcapacity,
gcpermcapacity, gcutil, printcompilation
© Tobias@Frech.info JUG HH - 22. Februar 2016 16
JVM Troubleshooting - Speicher
● Allgemeine statische GC-Informationen:
● jmap -heap jvmid
● Histogram der Heap-Objekte erzeugen:
● jmap -histo jvmid
● Dump des JVM-Heaps erzeugen:
● jmap -dump:format=b jvmid
● erzeugt Heap-Dump in Datei heap.bin
● nach heap.hprof umbenennen
● diese kann mit „Eclipse Memory Analyzer“ auf
Gründe von Memory Leaks analysiert werden
(http://wiki.eclipse.org/index.php/MemoryAnalyzer)
© Tobias@Frech.info JUG HH - 22. Februar 2016 17
JVM Troubleshooting - Threads
● jstack
● listet alle Threads in dem spezifizierten
JVM-Prozess
● zu jedem Thread wird der momentane
Callstack ausgegeben
● Option -l listet auch Locks und Deadlocks
● Option -F (force)
© Tobias@Frech.info JUG HH - 22. Februar 2016 18
Hybride Threaddump Analyse
● top
● Batch-Modus möglich: -b
● Anzahl Interationen: -n 1
● Threads statt Prozesse anzeigen: -H
● Die angezeigte Prozess-ID pro Thread ist auch die
Thread-ID in der JVM
● jstack
● Prozess-ID 23679 (dezimal) ist in Hex 5c7f
=> nid=0x5c7f
© Tobias@Frech.info JUG HH - 22. Februar 2016 19
JVM Environment
● OS Environment (PATH etc.) und JVM
Environment (System Properties) sind
getrennt
● Werte für das JVM-Environment können
durch Programme oder von außen beim
Start der JVM mit -Dname=wert gesetzt
werden
● jinfo (unter JDK5 nicht für Windows
verfügbar)
© Tobias@Frech.info JUG HH - 22. Februar 2016 20
JVM Flags
● Auswahl verschiedener Implementierung und
Ausgaben direkt in der JVM
● Logs zu GC, Compiler, Safe Points, Class Loading
…
● Funktionsweise:
● -XX:+AktivierteOption
● -XX:-DeaktivierteOption
● -XX:GroessenEinstellung=200m
● Kontrolle und Vergleich zwischen JVM-Versionen:
● java -XX:+PrintFlagsFinal -version
© Tobias@Frech.info JUG HH - 22. Februar 2016 21
Beispiel: GC Logging
● GC-Logs nicht überschreiben:
● -Xloggc:gc.log_`date +%F_%T`
● Für die Menschen unter uns:
● -XX:-PrintGCTimeStamps
● -XX:+PrintGCDateStamps
● Für die Admins:
● -XX:+UseGCLogFileRotation
● -XX:GCLogFileSize=, -XX:NumberOfGCLogFiles=
© Tobias@Frech.info JUG HH - 22. Februar 2016 22
VisualVM
© Tobias@Frech.info JUG HH - 22. Februar 2016 23
VisualVM - Bezugsquellen
● im JDK (auch OpenJDK) ab 1.6 enthalten
● Standalone:
● https://visualvm.dev.java.net/
● Runtime-Voraussetzung:
JDK 1.6+ (JRE reicht nicht!)
© Tobias@Frech.info JUG HH - 22. Februar 2016 24
JMX Architektur
© Tobias@Frech.info JUG HH - 22. Februar 2016 25
JVM Agent aktivieren
● Lokal aktivieren:
● JDK 5: -Dcom.sun.management.jmxremote
● JDK 6+ : nix, dank Attach API
● remote öffnen:
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
● bei Problemen RMI-Name setzen:
-Djava.rmi.server.hostname=...
© Tobias@Frech.info JUG HH - 22. Februar 2016 26
JMX nachträglich aktivieren
● jcmd 1234 ManagementAgent.start
jmxremote.port=5454
jmxremote.ssl=false
jmxremote.authenticate=false
● ManagementAgent.stop
JMX-Agents sollten auf kritischen Systemen
niemals ohne SSL und Authentifizierung
gestartet sein!
© Tobias@Frech.info JUG HH - 22. Februar 2016 27
VisualVM - Grundfunktionen
● JVM
● CPU
● Speicher, Garbage Collection, HeapDump
● Threads, ThreadDumps
● Profiler
● Sampler (seit 1.3)
© Tobias@Frech.info JUG HH - 22. Februar 2016 28
VisualVM - Interessante Plugins
● VisualGC
● MBeans
● Sampler
● JConsole -> TopThreads
● ThreadDumpAnalyzer (TDA)
© Tobias@Frech.info JUG HH - 22. Februar 2016 29
VisualVM - Snapshots
● halten den momentanen, sonst flüchtigen
Zustand fest
● können als Datei zur Analyse transportiert
werden
● Application Snapshots
● Profiler/Sampler Snapshots
© Tobias@Frech.info JUG HH - 22. Februar 2016 30
VisualVM - Tipps
● RMI-Name setzen
● -Djava.rmi.server.hostname=...
● Sampler kann Bilder speichern
● für Sampler:
Sampling-Frequenz einstellbar, beeinflusst
Performance und Messauflösung
● Achtung: Profiler-Plugin und Sampler
sehen ähnlich aus, produktiv Profiler nicht
einsetzen!
© Tobias@Frech.info JUG HH - 22. Februar 2016 31
Lasttest
● Definition des Lasttest-Ziels sehr wichtig
● Skalierbarkeit
● Verhalten unter Überlast
● Langzeitstabilität
● Monitoring
● Diensteigenschaften
● OS- und JVM-Ressourcen
● Lasttreiber (HTTP-Connector, EJBs, Queues,
Schnittstellen etc.)
© Tobias@Frech.info JUG HH - 22. Februar 2016 32
Hurra, wir haben einen Lasttest!
5 10 15 20
0
5
10
15
20
25
30
35
Clients
Antwortzeit
© Tobias@Frech.info JUG HH - 22. Februar 2016 33
Lasttest und Skalierbarkeit
1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
Antwortzeit
Durchsatz
Clients
Durchsatz
Antwortzeit

Weitere ähnliche Inhalte

Ähnlich wie Java-Anwendungen betreiben mit Durchblick

Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHagilemethoden
 
Maemo 5 Developer Workshop @ Metalab
Maemo 5 Developer Workshop @ MetalabMaemo 5 Developer Workshop @ Metalab
Maemo 5 Developer Workshop @ Metalabthp4
 
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltQuarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltMichael Frembs
 
WebGL für Geospatial
WebGL für GeospatialWebGL für Geospatial
WebGL für GeospatialCamptocamp
 
Brownbag: Java Applikationen und die JVM für „Ops“
Brownbag: Java Applikationen und die JVM für „Ops“Brownbag: Java Applikationen und die JVM für „Ops“
Brownbag: Java Applikationen und die JVM für „Ops“inovex GmbH
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungTilo Baller
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDAJörn Dinkla
 
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...Klaus Bild
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesQAware GmbH
 
Rollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenRollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenOliver Lemm
 
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungBack to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungMongoDB
 
Compilers Everywhere
Compilers EverywhereCompilers Everywhere
Compilers Everywhereberndmueller
 
Java FX8 JumpStart - JUG ch - zürich
Java FX8   JumpStart - JUG ch - zürichJava FX8   JumpStart - JUG ch - zürich
Java FX8 JumpStart - JUG ch - zürichSven Ruppert
 
Atom Publishing Protocol
Atom Publishing ProtocolAtom Publishing Protocol
Atom Publishing ProtocolDirk Haun
 
NetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerNetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerIngo Reinhart
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 

Ähnlich wie Java-Anwendungen betreiben mit Durchblick (20)

Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
Maemo 5 Developer Workshop @ Metalab
Maemo 5 Developer Workshop @ MetalabMaemo 5 Developer Workshop @ Metalab
Maemo 5 Developer Workshop @ Metalab
 
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltQuarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
 
WebGL für Geospatial
WebGL für GeospatialWebGL für Geospatial
WebGL für Geospatial
 
Brownbag: Java Applikationen und die JVM für „Ops“
Brownbag: Java Applikationen und die JVM für „Ops“Brownbag: Java Applikationen und die JVM für „Ops“
Brownbag: Java Applikationen und die JVM für „Ops“
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & Verwendung
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
 
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
 
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
The Best Things in Life Are Free – Wie Sie Ihre IBM ConnecEons Umgebung koste...
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit Microservices
 
Rollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenRollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX Anwendungen
 
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungBack to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
 
Compilers Everywhere
Compilers EverywhereCompilers Everywhere
Compilers Everywhere
 
Java FX8 JumpStart - JUG ch - zürich
Java FX8   JumpStart - JUG ch - zürichJava FX8   JumpStart - JUG ch - zürich
Java FX8 JumpStart - JUG ch - zürich
 
Atom Publishing Protocol
Atom Publishing ProtocolAtom Publishing Protocol
Atom Publishing Protocol
 
NetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerNetBeans für PHP-Entwickler
NetBeans für PHP-Entwickler
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Best Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in ContainernBest Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in Containern
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
 
Cepicky pywps
Cepicky pywpsCepicky pywps
Cepicky pywps
 

Java-Anwendungen betreiben mit Durchblick

  • 1. Java-Anwendungen betreiben mit Durchblick Vortrag am 22.2.2016 bei der Java User Group Hamburg (JUG HH) Tobias@Frech.info / @TobiasFrech
  • 2. © Tobias@Frech.info JUG HH - 22. Februar 2016 2 Tobias Frech Java ­ Administrator
  • 3. © Tobias@Frech.info JUG HH - 22. Februar 2016 3 iJUG e.V. Interessenverbund der Java User Groups e.V. http://www.ijug.eu/ JUG Hannover JUG Hessen JUG Hamburg (HH) JUG Kaiserslautern JUG Karlsruhe JUG Köln JUG Mannheim JUG München JUG Münster JUG Ostfalen JUG Saxony JUG Stuttgart e.V. JUG Switzerland JSUG Lightweight JUG München SOUG e.V. SUG Deutschland e.V. BED-Con e.V. DOAG e.V. JUG Augsburg JUG Berlin-Brandenburg JUG Bremen JUG Darmstadt JUG Deutschland e.V. JUG Dortmund JUG Erlangen–Nürnberg JUG Euregio Maas-Rhein JUG Görlitz
  • 4. © Tobias@Frech.info JUG HH - 22. Februar 2016 4 JUG Veranstaltungen
  • 5. © Tobias@Frech.info JUG HH - 22. Februar 2016 5 Agenda ● Vortragsziel / Motivation ● Demo-Server Setup ● Vorgehen beim Troubleshooting ● textbasierte Werkzeuge ● GUI: VisualVM ● Thema Lasttests Fragen sind jederzeit sehr erwünscht!
  • 6. © Tobias@Frech.info JUG HH - 22. Februar 2016 6 Umfrage ● Server-Administration oder Troubleshooting ? ● Java-Version (5 oder früher, 6, 7, 8?)
  • 7. © Tobias@Frech.info JUG HH - 22. Februar 2016 7 Raspberry Pi 2 „Server“-Setup Browser JMeter JBoss/ JVM H2 DVDstore DVD-Store-Anwendung mit Fehlersimulation mit freundlichem Dank an: http://www.inspectit.eu/ HTTP SSH RMI tobi@fedora (192.168.0.1) pi@pi (192.168.0.2)
  • 8. © Tobias@Frech.info JUG HH - 22. Februar 2016 8 Tools für OS-Ressourcen ● CPU: top ● RAM: free ● Disk: df, du ● Prozesse: ps ● Langzeit bzw. nachträglich: ● sar: „Collect, report, or save system activity information.“
  • 9. © Tobias@Frech.info JUG HH - 22. Februar 2016 9 JDK Admin-Tools ● Console ● jps ● jinfo ● jstack ● jstat ● jmap zukünftig: ● jcmd ● GUI ● jconsole ● jvisualvm https://docs.oracle.com/javase/ 8/docs/technotes/tools/
  • 10. © Tobias@Frech.info JUG HH - 22. Februar 2016 10 JVM Tools – Monitoring und Mgmt. ● jps: listet die verfügbaren JVMs auf ● jinfo: Informationen über Parameter und JVM-Environment ● jstat: Informationen über Classloading, Kompilierung und Garbage Collection ● jstack: Liste aller Threads mit momentaner Aktivität ● jmap: Histogramm und Dump des JVM- Speichers
  • 11. © Tobias@Frech.info JUG HH - 22. Februar 2016 11 JVM Tools - Verfügbarkeit Tool JDK 5 JDK 6 JDK 7 jps ok ok ok jinfo kein Windows / Linux Itanium Windows eingeschränkt Windows braucht ggf. zusätzliche Config jstat ok ok ok jstack kein Windows / Linux Itanium Windows eingeschränkt Windows braucht ggf. zusätzliche Config jmap kein Windows / Linux Itanium Windows eingeschränkt Windows braucht ggf. zusätzliche Config
  • 12. © Tobias@Frech.info JUG HH - 22. Februar 2016 12 Performance-Troubleshooting Analyse OS- Ressourcen CPU RAM Disk Prozesse CPU-Last Garbage Collection (GC) Analyse jstat, jmap Ursache: GC? Threaddump Analyse jstack, Sampler nein ja nein Memory- Anpassung, GC-Tuning, Memory-Analyse (Histogramm, Dump) ja Ursache bekannt? Hybride Threaddump Analyse top -H, jstack nein Ursache beheben oder kompensierende Maßnahmen: externe Systeme, Locks, ja
  • 13. © Tobias@Frech.info JUG HH - 22. Februar 2016 13 Demo ● Anwendung mit JMeter unter Last setzen und analysieren
  • 14. © Tobias@Frech.info JUG HH - 22. Februar 2016 14 JVM-Prozesse finden ● jps ● listet die lvmid aller für den ausführenden Benutzer monitorbaren JVMs auf ● -l für vollen Package-Namen ● -v für JVM-Argumente ● -m für Argumente an die main-Methode ● jcmd ● wie jps, vereint auch alle Funktionen der anderen Tools und löst diese mittelfristig ab
  • 15. © Tobias@Frech.info JUG HH - 22. Februar 2016 15 JVM Monitoring – Text basiert ● jstat -option jvmid [Interval] [Wiederholungen] ● Options: ● class, compiler, gc, gccapacity, gccause, gcnew, gcnewcapacity, gcold, gcoldcapacity, gcpermcapacity, gcutil, printcompilation
  • 16. © Tobias@Frech.info JUG HH - 22. Februar 2016 16 JVM Troubleshooting - Speicher ● Allgemeine statische GC-Informationen: ● jmap -heap jvmid ● Histogram der Heap-Objekte erzeugen: ● jmap -histo jvmid ● Dump des JVM-Heaps erzeugen: ● jmap -dump:format=b jvmid ● erzeugt Heap-Dump in Datei heap.bin ● nach heap.hprof umbenennen ● diese kann mit „Eclipse Memory Analyzer“ auf Gründe von Memory Leaks analysiert werden (http://wiki.eclipse.org/index.php/MemoryAnalyzer)
  • 17. © Tobias@Frech.info JUG HH - 22. Februar 2016 17 JVM Troubleshooting - Threads ● jstack ● listet alle Threads in dem spezifizierten JVM-Prozess ● zu jedem Thread wird der momentane Callstack ausgegeben ● Option -l listet auch Locks und Deadlocks ● Option -F (force)
  • 18. © Tobias@Frech.info JUG HH - 22. Februar 2016 18 Hybride Threaddump Analyse ● top ● Batch-Modus möglich: -b ● Anzahl Interationen: -n 1 ● Threads statt Prozesse anzeigen: -H ● Die angezeigte Prozess-ID pro Thread ist auch die Thread-ID in der JVM ● jstack ● Prozess-ID 23679 (dezimal) ist in Hex 5c7f => nid=0x5c7f
  • 19. © Tobias@Frech.info JUG HH - 22. Februar 2016 19 JVM Environment ● OS Environment (PATH etc.) und JVM Environment (System Properties) sind getrennt ● Werte für das JVM-Environment können durch Programme oder von außen beim Start der JVM mit -Dname=wert gesetzt werden ● jinfo (unter JDK5 nicht für Windows verfügbar)
  • 20. © Tobias@Frech.info JUG HH - 22. Februar 2016 20 JVM Flags ● Auswahl verschiedener Implementierung und Ausgaben direkt in der JVM ● Logs zu GC, Compiler, Safe Points, Class Loading … ● Funktionsweise: ● -XX:+AktivierteOption ● -XX:-DeaktivierteOption ● -XX:GroessenEinstellung=200m ● Kontrolle und Vergleich zwischen JVM-Versionen: ● java -XX:+PrintFlagsFinal -version
  • 21. © Tobias@Frech.info JUG HH - 22. Februar 2016 21 Beispiel: GC Logging ● GC-Logs nicht überschreiben: ● -Xloggc:gc.log_`date +%F_%T` ● Für die Menschen unter uns: ● -XX:-PrintGCTimeStamps ● -XX:+PrintGCDateStamps ● Für die Admins: ● -XX:+UseGCLogFileRotation ● -XX:GCLogFileSize=, -XX:NumberOfGCLogFiles=
  • 22. © Tobias@Frech.info JUG HH - 22. Februar 2016 22 VisualVM
  • 23. © Tobias@Frech.info JUG HH - 22. Februar 2016 23 VisualVM - Bezugsquellen ● im JDK (auch OpenJDK) ab 1.6 enthalten ● Standalone: ● https://visualvm.dev.java.net/ ● Runtime-Voraussetzung: JDK 1.6+ (JRE reicht nicht!)
  • 24. © Tobias@Frech.info JUG HH - 22. Februar 2016 24 JMX Architektur
  • 25. © Tobias@Frech.info JUG HH - 22. Februar 2016 25 JVM Agent aktivieren ● Lokal aktivieren: ● JDK 5: -Dcom.sun.management.jmxremote ● JDK 6+ : nix, dank Attach API ● remote öffnen: -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false ● bei Problemen RMI-Name setzen: -Djava.rmi.server.hostname=...
  • 26. © Tobias@Frech.info JUG HH - 22. Februar 2016 26 JMX nachträglich aktivieren ● jcmd 1234 ManagementAgent.start jmxremote.port=5454 jmxremote.ssl=false jmxremote.authenticate=false ● ManagementAgent.stop JMX-Agents sollten auf kritischen Systemen niemals ohne SSL und Authentifizierung gestartet sein!
  • 27. © Tobias@Frech.info JUG HH - 22. Februar 2016 27 VisualVM - Grundfunktionen ● JVM ● CPU ● Speicher, Garbage Collection, HeapDump ● Threads, ThreadDumps ● Profiler ● Sampler (seit 1.3)
  • 28. © Tobias@Frech.info JUG HH - 22. Februar 2016 28 VisualVM - Interessante Plugins ● VisualGC ● MBeans ● Sampler ● JConsole -> TopThreads ● ThreadDumpAnalyzer (TDA)
  • 29. © Tobias@Frech.info JUG HH - 22. Februar 2016 29 VisualVM - Snapshots ● halten den momentanen, sonst flüchtigen Zustand fest ● können als Datei zur Analyse transportiert werden ● Application Snapshots ● Profiler/Sampler Snapshots
  • 30. © Tobias@Frech.info JUG HH - 22. Februar 2016 30 VisualVM - Tipps ● RMI-Name setzen ● -Djava.rmi.server.hostname=... ● Sampler kann Bilder speichern ● für Sampler: Sampling-Frequenz einstellbar, beeinflusst Performance und Messauflösung ● Achtung: Profiler-Plugin und Sampler sehen ähnlich aus, produktiv Profiler nicht einsetzen!
  • 31. © Tobias@Frech.info JUG HH - 22. Februar 2016 31 Lasttest ● Definition des Lasttest-Ziels sehr wichtig ● Skalierbarkeit ● Verhalten unter Überlast ● Langzeitstabilität ● Monitoring ● Diensteigenschaften ● OS- und JVM-Ressourcen ● Lasttreiber (HTTP-Connector, EJBs, Queues, Schnittstellen etc.)
  • 32. © Tobias@Frech.info JUG HH - 22. Februar 2016 32 Hurra, wir haben einen Lasttest! 5 10 15 20 0 5 10 15 20 25 30 35 Clients Antwortzeit
  • 33. © Tobias@Frech.info JUG HH - 22. Februar 2016 33 Lasttest und Skalierbarkeit 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 Antwortzeit Durchsatz Clients Durchsatz Antwortzeit