java-anwendungen betreiben mit durchblick

Download Java-Anwendungen betreiben mit Durchblick

Post on 14-Apr-2017

408 views

Category:

Internet

3 download

Embed Size (px)

TRANSCRIPT

  • Java-Anwendungen betreiben mit Durchblick

    Vortrag am 22.2.2016

    bei der

    Java User Group Hamburg (JUG HH)

    Tobias@Frech.info / @TobiasFrech

    mailto:Tobias@Frech.infohttps://twitter.com/TobiasFrech

  • Tobias@Frech.info JUG HH - 22. Februar 2016 2

    Tobias Frech

    JavaAdministrator

  • 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 Kln JUG Mannheim JUG Mnchen JUG Mnster JUG Ostfalen JUG Saxony JUG Stuttgart e.V. JUG Switzerland JSUG Lightweight JUG Mnchen 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 ErlangenNrnberg JUG Euregio Maas-Rhein JUG Grlitz

  • 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 erwnscht!

  • Tobias@Frech.info JUG HH - 22. Februar 2016 6

    Umfrage

    Server-Administration oder Troubleshooting ?

    Java-Version (5 oder frher, 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 Fehlersimulationmit 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 fr OS-Ressourcen

    CPU: top RAM: free Disk: df, du Prozesse: ps Langzeit bzw. nachtrglich:

    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 jmapzuknftig: 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 verfgbaren JVMs auf jinfo: Informationen ber Parameter und

    JVM-Environment jstat: Informationen ber Classloading,

    Kompilierung und Garbage Collection jstack: Liste aller Threads mit

    momentaner Aktivitt jmap: Histogramm und Dump des JVM-

    Speichers

  • Tobias@Frech.info JUG HH - 22. Februar 2016 11

    JVM Tools - Verfgbarkeit

    Tool JDK 5 JDK 6 JDK 7

    jps ok ok ok

    jinfo kein Windows / Linux Itanium

    Windows eingeschrnkt

    Windows braucht ggf. zustzliche Config

    jstat ok ok ok

    jstack kein Windows / Linux Itanium

    Windows eingeschrnkt

    Windows braucht ggf. zustzliche Config

    jmap kein Windows / Linux Itanium

    Windows eingeschrnkt

    Windows braucht ggf. zustzliche Config

  • Tobias@Frech.info JUG HH - 22. Februar 2016 12

    Performance-TroubleshootingAnalyse 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 Manahmen:

    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 fr den ausfhrenden Benutzer monitorbaren JVMs auf

    -l fr vollen Package-Namen -v fr JVM-Argumente -m fr Argumente an die main-Methode

    jcmd wie jps, vereint auch alle Funktionen der

    anderen Tools und lst 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

    Grnde 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 mglich: -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 fr das JVM-Environment knnen durch Programme oder von auen beim Start der JVM mit -Dname=wert gesetzt werden

    jinfo (unter JDK5 nicht fr Windows verfgbar)

  • 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`

    Fr die Menschen unter uns: -XX:-PrintGCTimeStamps -XX:+PrintGCDateStamps

    Fr 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 nachtrglich 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 flchtigen Zustand fest

    knnen 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 fr Sampler:

    Sampling-Frequenz einstellbar, beeinflusst Performance und Messauflsung

    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 Langzeitstabilitt

    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 200

    5

    10

    15

    20

    25

    30

    35

    Clients

    Ant

    wor

    tzei

    t

  • Tobias@Frech.info 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

    Ant

    wor

    tzei

    t