java-anwendungen betreiben mit durchblick

33
Java-Anwendungen betreiben mit Durchblick Vortrag am 22.2.2016 bei der Java User Group Hamburg (JUG HH) [email protected] / @TobiasFrech

Upload: tobias-frech

Post on 14-Apr-2017

419 views

Category:

Internet


3 download

TRANSCRIPT

Page 1: Java-Anwendungen betreiben mit Durchblick

Java-Anwendungen betreiben mit Durchblick

Vortrag am 22.2.2016

bei der

Java User Group Hamburg (JUG HH)

[email protected] / @TobiasFrech

Page 2: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 2

Tobias Frech

Java ­ Administrator

Page 3: Java-Anwendungen betreiben mit Durchblick

© [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

Page 4: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 4

JUG Veranstaltungen

Page 5: Java-Anwendungen betreiben mit Durchblick

© [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!

Page 6: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 6

Umfrage

● Server-Administration oder Troubleshooting ?

● Java-Version (5 oder früher, 6, 7, 8?)

Page 7: Java-Anwendungen betreiben mit Durchblick

© [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)

Page 8: Java-Anwendungen betreiben mit Durchblick

© [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.“

Page 9: Java-Anwendungen betreiben mit Durchblick

© [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/

Page 10: Java-Anwendungen betreiben mit Durchblick

© [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

Page 11: Java-Anwendungen betreiben mit Durchblick

© [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

Page 12: Java-Anwendungen betreiben mit Durchblick

© [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

Page 13: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 13

Demo

● Anwendung mit JMeter unter Last setzen und analysieren

Page 14: Java-Anwendungen betreiben mit Durchblick

© [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

Page 15: Java-Anwendungen betreiben mit Durchblick

© [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

Page 16: Java-Anwendungen betreiben mit Durchblick

© [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)

Page 17: Java-Anwendungen betreiben mit Durchblick

© [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)

Page 18: Java-Anwendungen betreiben mit Durchblick

© [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

Page 19: Java-Anwendungen betreiben mit Durchblick

© [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)

Page 20: Java-Anwendungen betreiben mit Durchblick

© [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

Page 21: Java-Anwendungen betreiben mit Durchblick

© [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=

Page 22: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 22

VisualVM

Page 23: Java-Anwendungen betreiben mit Durchblick

© [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!)

Page 24: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 24

JMX Architektur

Page 25: Java-Anwendungen betreiben mit Durchblick

© [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=...

Page 26: Java-Anwendungen betreiben mit Durchblick

© [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!

Page 27: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 27

VisualVM - Grundfunktionen

● JVM● CPU● Speicher, Garbage Collection, HeapDump● Threads, ThreadDumps● Profiler● Sampler (seit 1.3)

Page 28: Java-Anwendungen betreiben mit Durchblick

© [email protected] JUG HH - 22. Februar 2016 28

VisualVM - Interessante Plugins

● VisualGC● MBeans● Sampler● JConsole -> TopThreads● ThreadDumpAnalyzer (TDA)

Page 29: Java-Anwendungen betreiben mit Durchblick

© [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

Page 30: Java-Anwendungen betreiben mit Durchblick

© [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!

Page 31: Java-Anwendungen betreiben mit Durchblick

© [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.)

Page 32: Java-Anwendungen betreiben mit Durchblick

© [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

Page 33: Java-Anwendungen betreiben mit Durchblick

© [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