Upload
tobias-frech
View
419
Download
3
Embed Size (px)
Citation preview
Java-Anwendungen betreiben mit Durchblick
Vortrag am 22.2.2016
bei der
Java User Group Hamburg (JUG HH)
[email protected] / @TobiasFrech
© [email protected] 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
© [email protected] JUG HH - 22. Februar 2016 4
JUG Veranstaltungen
© [email protected] 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!
© [email protected] JUG HH - 22. Februar 2016 6
Umfrage
● Server-Administration oder Troubleshooting ?
● Java-Version (5 oder früher, 6, 7, 8?)
© [email protected] JUG HH - 22. Februar 2016 7
Raspberry Pi 2
„Server“-Setup
Browser
JMeter
JBoss/JVM H2
DVDstore
DVD-Store-Anwendung mit Fehlersimulationmit freundlichem Dank an:
http://www.inspectit.eu/
HTTP
SSH
RMI
tobi@fedora (192.168.0.1)
pi@pi (192.168.0.2)
© [email protected] 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.“
© [email protected] 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/
© [email protected] 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
© [email protected] 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
© [email protected] JUG HH - 22. Februar 2016 12
Performance-Troubleshooting
Analyse OS-Ressourcen
CPURAMDisk
Prozesse
CPU-LastGarbage Collection
(GC) Analysejstat, jmap
Ursache: GC?
Threaddump Analysejstack, Sampler
nein
ja
nein
Memory-Anpassung,GC-Tuning,
Memory-Analyse(Histogramm,
Dump)
ja
Ursachebekannt?
Hybride Threaddump Analysetop -H, jstack
nein
Ursache beheben oder
kompensierende Maßnahmen:
externe Systeme, Locks,
ja
© [email protected] JUG HH - 22. Februar 2016 13
Demo
● Anwendung mit JMeter unter Last setzen und analysieren
© [email protected] 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
© [email protected] 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
© [email protected] 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)
© [email protected] 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)
© [email protected] 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
© [email protected] 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)
© [email protected] 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
© [email protected] 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=
© [email protected] JUG HH - 22. Februar 2016 22
VisualVM
© [email protected] 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!)
© [email protected] JUG HH - 22. Februar 2016 24
JMX Architektur
© [email protected] 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=...
© [email protected] 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!
© [email protected] JUG HH - 22. Februar 2016 27
VisualVM - Grundfunktionen
● JVM● CPU● Speicher, Garbage Collection, HeapDump● Threads, ThreadDumps● Profiler● Sampler (seit 1.3)
© [email protected] JUG HH - 22. Februar 2016 28
VisualVM - Interessante Plugins
● VisualGC● MBeans● Sampler● JConsole -> TopThreads● ThreadDumpAnalyzer (TDA)
© [email protected] 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
© [email protected] 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!
© [email protected] 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.)
© [email protected] JUG HH - 22. Februar 2016 32
Hurra, wir haben einen Lasttest!
5 10 15 200
5
10
15
20
25
30
35
Clients
Ant
wor
tzei
t
© [email protected] JUG HH - 22. Februar 2016 33
Lasttest und Skalierbarkeit
1 2 3 4 5 6 70
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
AntwortzeitDurchsatz
Clients
Dur
chsa
tz
An
two
r tze
it