SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
© 2010 kippdata informationstechnologie GmbH 1 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Monitoring und
Troubleshooting
Rainer Jung, Geschäftsführer
kippdata informationstechnologie GmbH
© 2010 kippdata informationstechnologie GmbH 2 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Agenda
 Aufwärmrunde
 Motivation
 Java Management Extensions (JMX)
 JDK-Tools Java 5 und 6
 Thread Dumps
 Diskussion!
© 2010 kippdata informationstechnologie GmbH 3 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Agenda
 Aufwärmrunde
 Motivation
 Java Management Extensions (JMX)
 JDK-Tools Java 5 und 6
 Thread Dumps
 Diskussion!
© 2010 kippdata informationstechnologie GmbH 4 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Aufwärmrunde – Wer bin ich?
 Wer bin ich?
 Geschäftsführer kippdata informationstechnologie GmbH
 Gründung 1998
 25 Mitarbeiter
 Erfahrungshintergrund: Schwerpunkt Systemintegration
 Hinzufügen von Produktionsqualitäten
(Performance, Ausfallsicherung) zu
(leider) meist schon fertigen Anwendungen
 Troubleshooting (durch den ganzen Stack hindurch)
und auf dieser Basis dann ...
© 2010 kippdata informationstechnologie GmbH 5 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Aufwärmrunde – Wer bin ich?
 Open Source-Leser
 Problemanalyse
 Open Source-Contributor
 Problembehebung
 Apache Tomcat-Committer und PMC-Mitglied
 Apache HTTP Server-Committer
 Apache APR-Committer
 mod_jk-Maintainer
 Member der Apache Software Foundation (ASF)
© 2010 kippdata informationstechnologie GmbH 6 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Aufwärmrunde – Wer sind Sie?
 Wer sind Sie?
 Wer gehört eher zu
 Entwicklung?
 Betrieb?
 Wer trägt Verantwortung für Produktionsstabilität oder
Fehleranalyse?
 Wer hat mit 24x7x365-Anwendungen zu tun?
 Wer musste schon Probleme debuggen, die erst in der
Produktion beobachtet wurden?
© 2010 kippdata informationstechnologie GmbH 7 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Aufwärmrunde – Wer sind Sie?
 Wer hat in der Produktion
 Java 1.4.2
 Java 5
 Java 6
 Eine nicht-Sun VM
 Wessen Code läuft nicht Standalone, sondern in einer
Form von Container (Tomcat, Application Server, ...)?
 Wer macht schon Monitoring für Java-Anwendungen?
 Bei wem basiert HW-Kapazitätsplanung auf gemessenen
Werten?
 Gilt dies auch für das Sizing von SW-Komponenten (Pools etc.)?
© 2010 kippdata informationstechnologie GmbH 8 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Aufwärmrunde – Wer sind Sie?
 Wer weiß, was ein MBean ist?
 Wer weiß, was ein Java Thread Dump ist?
 Haben Sie schon ein Problem durch Thread Dumps gelöst?
 Wer hat schon einmal zu einem Open Source-Projekt
beigetragen?
 Patch, Doku, Problemanalyse
 Wer ist Projektmitglied bei einem Open Source-Projekt?
© 2010 kippdata informationstechnologie GmbH 9 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Aufwärmrunde – Wer sind Sie?
 Dieser Vortrag
 Betrifft im wesentlichen Server-Anwendungen
 Bezieht sich fast ausschließlich auf die Sun JVM
 Java 5 und 6
© 2010 kippdata informationstechnologie GmbH 10 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
 Aufwärmrunde
 Motivation
 Java Management Extensions (JMX)
 JDK-Tools Java 5 und 6
 Thread Dumps
 Diskussion!
© 2010 kippdata informationstechnologie GmbH 11 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Motivation – Monitoring
 Ziele von Monitoring
 Fehlererkennung, Rot/Grün-Ampeln, Alarmierung
 Automatische Erkennung und Meldung kritischer Fehler
 Möglichst keine Fehlalarme
 Möglichst Meldung der Wurzelursache
 Meist aber nur gut verstandene Basiszustände und End-to-End
 Filesystem voll, CPU ausgelastet
 Anwendungs-Login, Test-Transaktion
© 2010 kippdata informationstechnologie GmbH 12 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Motivation – Monitoring
 Weitere Ziele von Monitoring
 Kontinuierliche Sammlung von Laufzeitwerten
 Pollen der Daten
 Ablage der Daten
 Verdichtung und Visualisierung
 Wird benötigt
 zur Analyse der Wurzelursache bei wiederkehrenden Problemen
 für Kapazitätsmanagement (z.B. Anpassung Sizing)
© 2010 kippdata informationstechnologie GmbH 13 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Motivation – Monitoring
 Die Betriebssicht
 Den Betrieb interessiert meist nur die Meldung von
Störungen (Incident Management)
 Der Betrieb greift auf die Entwicklung zurück, wenn es
um die Analyse komplexerer Probleme geht
 Die Entwicklungssicht
 Zur erfolgreichen Analyse von Betriebsproblemen
benötigen Sie Auswertungen über das Zeitverhalten der
Systemkomponenten
 Diese muss der Betrieb bereitstellen
© 2010 kippdata informationstechnologie GmbH 14 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Motivation – Troubleshooting
 Troubleshooting:
Die häufigsten technischen Probleme sind
 Performance-Probleme
 Schlechte Antwortzeiten
 Schlechter Durchsatz
 Stabilitäts-Probleme
 Die Anwendung reagiert nicht mehr
© 2010 kippdata informationstechnologie GmbH 15 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Motivation – Troubleshooting
 Die häufigsten Problemursachen sind
 Überlastete Backends
 Locking-Probleme
 Memory-Probleme (und schlechte GC-Einstellungen)
 Falsches Sizing der eingesetzten Software-Komponenten
 Pools, Caches, Timeouts
 Fast nie: Engpass CPU, Platte oder Netz
© 2010 kippdata informationstechnologie GmbH 16 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Motivation – Troubleshooting
 Was wollen wir zur Laufzeit herausfinden?
 Mit Monitoring
 Welche Last wird abgearbeitet, wie sind die Antwortzeiten?
 Wie ausgelastet sind die konfigurierten
Softwarekomponenten?
 Pools, Caches
 Wie verhält sich die Garbage Collection?
 Mit Java Thread Dumps
 Warten wir auf andere Systeme (Backend, Datenbank, ...)?
 Warten wir auf Locks (Software-Design)?
 Loopen wir im Code?
© 2010 kippdata informationstechnologie GmbH 17 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
 Aufwärmrunde
 Motivation
 Java Management Extensions (JMX)
 JDK-Tools Java 5 und 6
 Thread Dumps
 Diskussion!
© 2010 kippdata informationstechnologie GmbH 18 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Java Management Extensions (JMX)
 Sehr gute Möglichkeit interne Applikationszustände von
außen abfragbar zu machen
 Größen (Pools etc.), Zähler (Anfragen, Dauern, Fehlerzahlen)
 komplexe Datenstrukturen
 Aber auch Konfigurationseinstellungen
 Operationen möglich
 Reset, Resizing, Loglevel ändern, Aktivierung/Deaktivierung, ...
 Notifications (Emitter, Listener)
 Ereignismeldung, z.B Schwellwertüberwachung
© 2010 kippdata informationstechnologie GmbH 19 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Java Management Extensions (JMX)
 Java-Standard
 JMX Version 1.4 (Java 6, ohne optionale Connector-Teile)
 JSR-3, Standardbestandteil ab Java 5, vorher etwa MX4J
 JSR-160, Java Management Extensions Remote API
 JSR-262 Web Services Connector for JMX Agents: Java 7?
 Bislang aber nur „echte“ Web Services zu sehen
 JSR-255 (JMX 2.0): verschoben auf Java 8!
© 2010 kippdata informationstechnologie GmbH 20 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Java Management Extensions (JMX)
 Bereitstellung der Informationen in Form von MBeans
 In jeder Java Laufzeitinstanz liegen einige MBeans vor
 Viele Container bringen weitere MBeans mit
 Es ist nicht schwierig MBeans selbst bereitzustellen
 Zentrale Registrierung am MBeanServer
 die MBeans bekommen eindeutige Namen (ObjectName)
 meist nur eine MBeanServer pro JVM
 Remote Management (Connector, Adapter)
© 2010 kippdata informationstechnologie GmbH 21 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Zugriff von außen auf den MBeanServer
 Seit Java 6: „Attach on Demand“
 Lokaler Zugriff ohne Vorbereitung (Rechte auf Prozess nötig)
 Für Zugriff über Netz werden System Properties gesetzt
 http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html#gdevf
 -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9876 ...
 Wichtig: in Produktion bitte mit Zugangsschutz!
 Firewalls nicht unproblematisch (RMI macht weitere Ports auf)
 Lösung JMXServiceURL und JMXConnectorServer
 Beispiel: JmxRemoteLifecycleListener.java seit Tomcat 6
© 2010 kippdata informationstechnologie GmbH 22 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 JMX-Clients
 JDK-Tools als Beispiele
 Zugang über andere Konnektoren
 Beispiele für Zugang via HTTP
 JMXProxy in Tomcat
 HTTP-Konnektor in MX4J
 eigenes Servlet
 jmxterm, Jmx4Perl, …
 Nagios, Munin, ...: all have JMX plugins
© 2010 kippdata informationstechnologie GmbH 23 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Kleine Demo …
 Zugang via JConsole
 Targets:
 Sleep.java
 JConsole selbst
 Tomcat
 Zugang via Browser
 Targets:
 Tomcat Manager/JMXProxy
 Webapp kpdtexplorer
© 2010 kippdata informationstechnologie GmbH 24 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Beispiele Tomcat
 Thread Pools: Auslastung
 Datenbank-Pools: Auslastung
 Gesamtlast Requests, Verarbeitungsdauer Requests
 Ableitung: Last/Durchsatz und mittlere Antwortzeit im letzten
Messintervall
 Anzahl Sessions pro Webapp
 Aber auch
 Aktuell in Bearbeitung befindliche URLs und bisherige
Verarbeitungsdauer dieser Requests
© 2010 kippdata informationstechnologie GmbH 25 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Auswertung
 Es reicht nicht aus, interaktive Beobachtungen
durchzuführen
 Keine Historie, jeder User pollt für sich
 ist aber häufig ein guter Einstieg!
 Also: geeignete
 geeignete Werkzeuge zum pollen und protokollieren
auswählen
 Schwellwerte festlegen
 Auswerteverfahren aufsetzen (Visualisierung)
© 2010 kippdata informationstechnologie GmbH 26 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Problembereiche
 Skalare Attribute versus MXBeans (OpenMBeans)
 Es werden zunehmend MBeans verwendet, die geschachtelte Daten
zurückliefern
 MXBeans erlauben es die Struktur der Daten herauszufinden
 Viele Tools können das aber noch nicht
 Wird zunehmend zu einem Auswahlkriterium
 Deshalb soweit sinnvoll bei eigenen MBeans skalare Attribute
verwenden
© 2010 kippdata informationstechnologie GmbH 27 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Problembereiche
 MBeans orientieren sich häufig an der Source Code-Struktur
 Nicht immer optimale Granularität
 Viele MBeans des gleichen Typs
 Dies erhöht enorm die Poll-Last
 Beispiel Webcontainer: Verwende kleine Webapp, die die gewünschten
Datensätze in der richtigen Granularität liefert
 Sie liefern nicht immer exakt die Daten, die wir sehen wollen,
sondern die, die intern gerade vorliegen
 Beispiel: Maximale Größe Pool und aktuelle Größe Pool
statt prozentuale Auslastung
 Einfache Ableitungen von Größen nötig
(Quotienten, Differenzen, Quotienten von Differenzen)
© 2010 kippdata informationstechnologie GmbH 28 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Java Management Extensions
 Problembereiche
 Das richtige Maß halten
 Es gibt häufig zu viele MBeans
 Was bedeuten die einzelnen MBean-Attribute?
 Was wollen wir warum sehen?
 Was fangen wir mit den Werten an?
 Gibt es Schwellwerte für Gut/Schlecht?
 Brauchen wir Aufzeichnungen für Auslastungsbetrachtungen (Sizing)
© 2010 kippdata informationstechnologie GmbH 29 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
 Aufwärmrunde
 Monitoring und Troubleshooting
 Java Management Extensions (JMX)
 JDK-Tools Java 5 und 6
 Thread Dumps
 Diskussion!
© 2010 kippdata informationstechnologie GmbH 30 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
JDK-Tools Java 5 und 6
 JDK-Tools Java 5 und 6
 Immer JDK verwenden
 alle relevanten Tools sind nicht im JRE!
 Die Tools werden mit Patchreleases verbessert
 ab und zu mal ein JVM-Patchupdate wäre schön
 Tools basieren auf Java, bekommen aber JVM-Optionen
mittels „-J“
 -J-d64
 -J-mx32m
© 2010 kippdata informationstechnologie GmbH 31 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
JDK-Tools Java 5 und 6
 Tools Java5
 jps: welche Javaprozesse laufen
 jstat: laufende Textausgabe von Werten aus dem
Plattform-MBeans
 jconsole: GUI zur Anzeige von MBeans
 Kurze Demo
 JConsole erweiterbar mit Plugins (Custom Tabs)
 http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html#gdeje
© 2010 kippdata informationstechnologie GmbH 32 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
JDK-Tools Java 5 und 6
 Tools Java 6 (zusätzlich)
 jinfo: Ausgabe und Manipulation von Flags
 jstack: Ausgabe von Stack-Dumps
 jmap & jhat: Dump and Analyse des Heaps
 jvisualvm: mächtiges GUI, erweiterbar durch Plugins
 Kurze Demo
 JVisualVM erweiterbar mit Plugins
 https://visualvm.dev.java.net/
 Dort auch aktuellere Version verfügbar!
© 2010 kippdata informationstechnologie GmbH 33 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
JDK-Tools Java 5 und 6
 Diese Tools sind sehr gut, um sich einzuarbeiten
 Welche Daten gibt es?
 Wie verhalten sie sich?
 Wie hängen sie zusammen?
 Was davon interessiert mich?
und die Kreativität anzuregen!
 Oder auch um nicht vorbereitete Fragen
ad hoc anzugehen
 Das ist manchmal nötig
© 2010 kippdata informationstechnologie GmbH 34 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
JDK-Tools Java 5 und 6
 Diese Tools sind nicht geeignet für den dauerhaften
Einsatz im Enterprise-Umfeld
 Typische Anforderungen
 dauerhaftes Sammeln von Daten
 automatisierte Auswertung
 Schwellwerte, Verdichtung, Visualisierung, Trends
 Ergebnisse sollen persistent sein
 zentrales Daten-Repository
 zentrale Konfiguration
 Anwendungs- und Container-Typen, Farmknoten, MBeans
© 2010 kippdata informationstechnologie GmbH 35 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
 Aufwärmrunde
 Monitoring und Troubleshooting
 Java Management Extensions (JMX)
 JDK-Tools Java 5 und 6
 Thread Dumps
 Diskussion!
© 2010 kippdata informationstechnologie GmbH 36 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Problembeschreibung
 Performanceprobleme
 Anwendung ist zu langsam (einzelne Vorfälle)
 Es bilden sich Staus aus
 und dann meist als Folge Stabilitätsprobleme
 Anwendung reagiert nicht mehr
 Fragen
 Wo kommen die Performance-Probleme her?
 Warten auf Locks, Fremdsysteme?
 Intensive Berechnungen?
 Wo kommt ein zu hoher CPU-Verbrauch her (bei Extremen)?
© 2010 kippdata informationstechnologie GmbH 37 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Performance-Probleme bei verteilten Systemen
 Die Ursache ist nicht meine Komponente A, es ist wohl B
 Die Ursache ist nicht meine Komponente B, es ist wohl C
 Die Datenbank C langweilt sich
 Dann ist es wohl das Netz!
 Die Erfahrung zeigt: meistens nicht.
A
A
B
B C
© 2010 kippdata informationstechnologie GmbH 38 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Inhalt eines Thread-Dumps
 Ein Thread-Dump ist eine Momentaufnahme der Code-
Ausführung in der JVM
 Er enthält eine Liste aller Threads in der JVM
 Mit Name und ID, sowie Zustand (etwa runnable)
 ID meist abbildbar auf die Thread-Nummern des OS
 Mit komplettem Funktionsstack der Java-Methoden
 Mit Informationen bzgl. des Wartens auf Locks
 Mit Ausgabe, ob ein Deadlock vorliegt
© 2010 kippdata informationstechnologie GmbH 39 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Momentaufnahme
 Meist muss mehr als ein Thread-Dump gemacht werden, um
Zufallsbeobachtungen auszuschliessen
 Z.B. 3 Dumps im Abstand von jeweils 3 Sekunden
 Thread-Dumps sind ein JVM-Feature
 Klappt also für alle Java-Prozesse!
 Thread-Dumps gehen sehr schnell
 Thread-Dumps sind OK in Produktion! (ca. ab 1.4.2_10)
 Auch regelmäßig (alle 10 Minuten; nicht: Sekunden)
© 2010 kippdata informationstechnologie GmbH 40 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Tipp: Wegschreiben von 3 Thread Dumps ins Stopp-
Skript aufnehmen
 Gerade unter Stress wird nicht daran gedacht vor dem
Neustart noch Dumps zu machen
 Wohin geht der Dump?
 Nach STDOUT
 Im Startskript auffangen
 Zeitstempel hinzufügen
 Rotieren
© 2010 kippdata informationstechnologie GmbH 41 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Wie wird ein Dump erzeugt?
 Unix/Linux: sende QUIT-Signal an Prozess
 Das darf der root-User und der Owner des Prozesses
 Es beendet nicht den Prozess! Der Name ist irreführend.
 Windows: send Break-Signal an den Prozess
 Das darf nur ein Prozess, der in der gleichen Console-Gruppe wie
die JVM ist
 Meist nur auf Entwickler-PC oder in speziellen Fällen in
Produktion so machbar
 Start über DOS-Box
 Demo: Tomcat
© 2010 kippdata informationstechnologie GmbH 42 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Was machen wir bei einem Windows-Service?
 Hat kein Terminal, deshalb klappt Break-Signal nicht
 Ab Java 5 gibt es einen programmatischen Weg, aus
der Java-Anwendung heraus Thread-Dumps aufzurufen
 java.lang.management.ThreadMXBean
 Der Dump ist etwas weniger aussagekräftig
 Weniger Lock-Information (besser ab Java 6)
 Weniger IDs zum Thread
 Keine JVM-internen Threads
© 2010 kippdata informationstechnologie GmbH 43 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Aufrufmöglichkeiten MBean-basierter Thread-Dump
 Aufrufbar über JMX-Schnittstelle
 Ab Java 6 ohne vorherige Aktivierung der Schnittstelle
(Attach on Demand)
 jstack (kann aber keine Authentisierung)
 <JDK_HOME>/demo/management/FullThreadDump/FullThreadDump.jar
 Eigener Client
 Oder kapseln in HTTP-Servlet oder ähnlichem Aufrufweg
 Demo: kpdtexplorer
© 2010 kippdata informationstechnologie GmbH 44 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Ausgabe Deadlock
Deadlock found :-
"ajp-127.0.0.1-8009-42" Id=486 in
BLOCKED on lock=java.lang.Object@1d461d7
 owned by ajp-127.0.0.1-8009-38 Id=460
 at jcifs.smb.SmbTree.treeConnect(SmbTree.java:128)
 at jcifs.smb.SmbTree.send(SmbTree.java:64)
 at jcifs.smb.SmbTree.treeDisconnect(SmbTree.java:168)
 at jcifs.smb.SmbSession.logoff(SmbSession.java:301)
 at jcifs.smb.SmbTransport.getSmbSession(SmbTransport.java:138)
 at jcifs.smb.SmbSession.logon(SmbSession.java:167)
 at jcifs.smb.SmbSession.logon(SmbSession.java:162)
...
"ajp-127.0.0.1-8009-38" Id=460 in
BLOCKED on lock=jcifs.smb.SmbTransport@14cfb2c
 owned by ajp-127.0.0.1-8009-42 Id=486
 at jcifs.smb.SmbTree.treeConnect(SmbTree.java:130)
 at jcifs.smb.SmbSession.logon(SmbSession.java:169)
 at jcifs.smb.SmbSession.logon(SmbSession.java:162)
...
© 2010 kippdata informationstechnologie GmbH 45 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Konsequenz Deadlock
 Über 400 Threads im Stack
"ajp-127.0.0.1-8009-750" Id=2382 in
BLOCKED on lock=jcifs.smb.SmbTransport@14cfb2c
 owned by ajp-127.0.0.1-8009-42 Id=486
 at jcifs.util.transport.Transport.connect(Transport.java:151)
 at jcifs.smb.SmbTransport.connect(SmbTransport.java:287)
 at jcifs.smb.SmbSession.getChallenge(SmbSession.java:146)
 at jcifs.smb.SmbSession.getChallenge(SmbSession.java:140)
...
 Entstanden innerhalb weniger Minuten
 Keine Neuanmeldung mehr möglich
 Obwohl nur zwei Threads im Deadlock sind, bleiben sehr viele
Threads dahinter hängen
© 2010 kippdata informationstechnologie GmbH 46 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Entwickler-Kommentar zu diesem Deadlock
„I believe the deadlock could only be triggered by a contrived
test that creates an excessive number of threads that would
never been used in a normal application.“
 dict.leo.org:
contrived = arrangiert, erfunden, gekünstelt, gestellt
 Hier war es normale Produktion!
© 2010 kippdata informationstechnologie GmbH 47 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Lock-Contention
 Viele Threads im Stack
"ajp-127.0.0.1-8009-XXX" Id=YYY in TIMED_WAITING on
lock=com.mybiz.myapp.webapp.handler.FormHandler@be635d
 at java.lang.Object.wait(Native Method)
 at com.mybiz.myapp.webapp.handler.FormHandler.lock(Unknown Source)
 at com.mybiz.myapp.webapp.UpdateAction.execute(Unknown Source)
 at com.mybiz.myapp.webapp.ActionBase.execute(Unknown Source)
 at org.apache.struts.action.RequestProcessor.
processActionPerform(RequestProcessor.java:484)
 at org.apache.struts.action.RequestProcessor.
process(RequestProcessor.java:274)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
...
 Die Thread-IDs XXX und YYY wechseln
langsam im Laufe der Zeit
© 2010 kippdata informationstechnologie GmbH 48 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Dump-Auswertung
 Meist sehen wir uns zunächst nur die obersten 5-10
Methoden des Stacks an
 Wir wollen alle Threads gruppieren, deren Top-N Methoden-
Stack gleich ist
 Was machen die meisten Threads gerade?
 Hier bietet sich ein Auswerteskript an
 Bei Ideen, was merkwürdig sein könnte, immer die Idee im
vollen Dump überprüfen
 Demo Stack-Statistik im kpdtexplorer
© 2010 kippdata informationstechnologie GmbH 49 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Phänomene, die sich meist gut durch Thread-Dumps
verstehen lassen
 Die Anwendung ist insgesamt langsam, obwohl die CPU-
Auslastung gering ist
 Dann wird meistens auf etwas gewartet
 Remote Calls (Middleware, DB, Webservices)
 Locks
 Lieblingsformel
Durchsatz * Antwortzeit = Parallelität
 Normale Anfragerate, erhöhte Antwortzeit => erhöhte Threadzahl
© 2010 kippdata informationstechnologie GmbH 50 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Phänomene, die sich meist gut durch Thread-Dumps
verstehen lassen – Fortsetzung
 Die CPU-Auslastung ist zu hoch
 Was ist auf der CPU (Thread-Nummer)
 Was macht der Thread?
 Die Anwendung reagiert nicht mehr
 Deadlock?
 Alle Threads warten auf remote?
© 2010 kippdata informationstechnologie GmbH 51 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Thread Dumps
 Vorschlag
 Trauen Sie Sich Thread-Dumps in der Produktion zu machen
 Natürlich erst im Test bzw. Staging
 Bei wichtigen Anwendungen auch proaktiv und regelmässig
 Betrieb und Entwicklung sollten zusammen versuchen die
Dumps zu verstehen
 Insbesondere auch im Gut-Fall
 Lassen Sie Sich nicht von der Größe abschrecken
 Skript zum Zusammenfassen gleicher Top-N-Stacks
© 2010 kippdata informationstechnologie GmbH 52 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
 Aufwärmrunde
 Motivation
 Java Management Extensions (JMX)
 JDK-Tools Java 5 und 6
 Thread Dumps
 Diskussion!
© 2010 kippdata informationstechnologie GmbH 53 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Diskussion
 Fragen?
© 2010 kippdata informationstechnologie GmbH 54 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
 Abspann
© 2010 kippdata informationstechnologie GmbH 55 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
kippdata – Kontakt
 Wie können wir Ihnen helfen?
 So erreichen Sie uns:
 info@kippdata.de
 rainer.jung@kippdata.de
 www.kippdata.de
 0228/98549-0
© 2010 kippdata informationstechnologie GmbH 56 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010
Abspann
 kippdata informationstechnologie GmbH
 Professioneller Open Source Support
 Schwerpunkt Apache Tomcat und Apache httpd
 Betriebskonzepte zu Hochlast und Ausfallsicherung
 Healthchecks von produktiven JEE-Anwendungen
 Lasttests und Sizing, Analyse von Produktionsproblemen
 Workshops
 Besuchen Sie uns auf www.kippdata.de, und
www.kippdata.de/tomcat

Weitere ähnliche Inhalte

Was ist angesagt?

OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOPITZ CONSULTING Deutschland
 
Oracle Secure Patching Concept
Oracle Secure Patching ConceptOracle Secure Patching Concept
Oracle Secure Patching ConceptCarsten Muetzlitz
 
MicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit QuarkusMicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit Quarkusgedoplan
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißOPITZ CONSULTING Deutschland
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OPITZ CONSULTING Deutschland
 

Was ist angesagt? (10)

OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
 
Oracle Secure Patching Concept
Oracle Secure Patching ConceptOracle Secure Patching Concept
Oracle Secure Patching Concept
 
OC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle LizenzierungOC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle Lizenzierung
 
MicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit QuarkusMicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit Quarkus
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
 
OC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-LizenzierungOC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-Lizenzierung
 
2020 oracle lizenznews
2020 oracle lizenznews2020 oracle lizenznews
2020 oracle lizenznews
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
 
"OC|Webcast: Grundlagen der Oracle Lizenzierung"
"OC|Webcast: Grundlagen der Oracle Lizenzierung""OC|Webcast: Grundlagen der Oracle Lizenzierung"
"OC|Webcast: Grundlagen der Oracle Lizenzierung"
 

Ähnlich wie OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung

Webcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMon
Webcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMonWebcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMon
Webcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMonQUIBIQ Hamburg
 
Monitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-AnwendungenMonitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-Anwendungengedoplan
 
Sicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/SolarisSicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/SolarisJomaSoft
 
Logical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und HadoopLogical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und HadoopOPITZ CONSULTING Deutschland
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollWolfgang Weigend
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenBjoern Reinhold
 
Effizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 ServerEffizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 ServerJomaSoft
 
Jakarta EE 10: Was gibt es Neues?
Jakarta EE 10: Was gibt es Neues?Jakarta EE 10: Was gibt es Neues?
Jakarta EE 10: Was gibt es Neues?gedoplan
 
Rapid Deploy von OS, Virtualsierung und Applikation
Rapid Deploy von OS, Virtualsierung und ApplikationRapid Deploy von OS, Virtualsierung und Applikation
Rapid Deploy von OS, Virtualsierung und ApplikationJomaSoft
 
Rapid Deployment mit JomaSoft VDCF
Rapid Deployment mit JomaSoft VDCFRapid Deployment mit JomaSoft VDCF
Rapid Deployment mit JomaSoft VDCFJomaSoft
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...Marc Müller
 
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...OPITZ CONSULTING Deutschland
 
Collaboration day 2016 panagenda
Collaboration day 2016   panagendaCollaboration day 2016   panagenda
Collaboration day 2016 panagendaBelsoft
 
Architektur und Automation als Enabler für DevOps
Architektur und Automation als Enabler für DevOpsArchitektur und Automation als Enabler für DevOps
Architektur und Automation als Enabler für DevOpsmatfsw
 
OSDC 2010 | What's new in Apache 2.4? by Rainer Jung
OSDC 2010 | What's new in Apache 2.4? by Rainer JungOSDC 2010 | What's new in Apache 2.4? by Rainer Jung
OSDC 2010 | What's new in Apache 2.4? by Rainer JungNETWAYS
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
 
Lasttest auf Zuruf CloudTest On Demand
Lasttest auf Zuruf CloudTest On DemandLasttest auf Zuruf CloudTest On Demand
Lasttest auf Zuruf CloudTest On DemandSOASTA
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 

Ähnlich wie OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung (20)

Webcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMon
Webcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMonWebcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMon
Webcast: Prozess Monitoring in Azure (und on premise) mit dem IntelliMon
 
Monitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-AnwendungenMonitoring und Profiling von Java-Anwendungen
Monitoring und Profiling von Java-Anwendungen
 
Sicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/SolarisSicherheit, Compliance, Höchsteistung mit SPARC/Solaris
Sicherheit, Compliance, Höchsteistung mit SPARC/Solaris
 
Logical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und HadoopLogical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und Hadoop
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
 
SpiraTeam im Überblick
SpiraTeam im ÜberblickSpiraTeam im Überblick
SpiraTeam im Überblick
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
Effizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 ServerEffizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 Server
 
Jakarta EE 10: Was gibt es Neues?
Jakarta EE 10: Was gibt es Neues?Jakarta EE 10: Was gibt es Neues?
Jakarta EE 10: Was gibt es Neues?
 
Rapid Deploy von OS, Virtualsierung und Applikation
Rapid Deploy von OS, Virtualsierung und ApplikationRapid Deploy von OS, Virtualsierung und Applikation
Rapid Deploy von OS, Virtualsierung und Applikation
 
Rapid Deployment mit JomaSoft VDCF
Rapid Deployment mit JomaSoft VDCFRapid Deployment mit JomaSoft VDCF
Rapid Deployment mit JomaSoft VDCF
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
 
Collaboration day 2016 panagenda
Collaboration day 2016   panagendaCollaboration day 2016   panagenda
Collaboration day 2016 panagenda
 
Architektur und Automation als Enabler für DevOps
Architektur und Automation als Enabler für DevOpsArchitektur und Automation als Enabler für DevOps
Architektur und Automation als Enabler für DevOps
 
OSDC 2010 | What's new in Apache 2.4? by Rainer Jung
OSDC 2010 | What's new in Apache 2.4? by Rainer JungOSDC 2010 | What's new in Apache 2.4? by Rainer Jung
OSDC 2010 | What's new in Apache 2.4? by Rainer Jung
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
Lasttest auf Zuruf CloudTest On Demand
Lasttest auf Zuruf CloudTest On DemandLasttest auf Zuruf CloudTest On Demand
Lasttest auf Zuruf CloudTest On Demand
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 

Kürzlich hochgeladen

Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Markus Unterauer
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...OPEN KNOWLEDGE GmbH
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationOPEN KNOWLEDGE GmbH
 
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...DNUG e.V.
 
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...DNUG e.V.
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudOPEN KNOWLEDGE GmbH
 

Kürzlich hochgeladen (6)

Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
 
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 

OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung

  • 1. © 2010 kippdata informationstechnologie GmbH 1 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Monitoring und Troubleshooting Rainer Jung, Geschäftsführer kippdata informationstechnologie GmbH
  • 2. © 2010 kippdata informationstechnologie GmbH 2 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Agenda  Aufwärmrunde  Motivation  Java Management Extensions (JMX)  JDK-Tools Java 5 und 6  Thread Dumps  Diskussion!
  • 3. © 2010 kippdata informationstechnologie GmbH 3 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Agenda  Aufwärmrunde  Motivation  Java Management Extensions (JMX)  JDK-Tools Java 5 und 6  Thread Dumps  Diskussion!
  • 4. © 2010 kippdata informationstechnologie GmbH 4 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Aufwärmrunde – Wer bin ich?  Wer bin ich?  Geschäftsführer kippdata informationstechnologie GmbH  Gründung 1998  25 Mitarbeiter  Erfahrungshintergrund: Schwerpunkt Systemintegration  Hinzufügen von Produktionsqualitäten (Performance, Ausfallsicherung) zu (leider) meist schon fertigen Anwendungen  Troubleshooting (durch den ganzen Stack hindurch) und auf dieser Basis dann ...
  • 5. © 2010 kippdata informationstechnologie GmbH 5 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Aufwärmrunde – Wer bin ich?  Open Source-Leser  Problemanalyse  Open Source-Contributor  Problembehebung  Apache Tomcat-Committer und PMC-Mitglied  Apache HTTP Server-Committer  Apache APR-Committer  mod_jk-Maintainer  Member der Apache Software Foundation (ASF)
  • 6. © 2010 kippdata informationstechnologie GmbH 6 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Aufwärmrunde – Wer sind Sie?  Wer sind Sie?  Wer gehört eher zu  Entwicklung?  Betrieb?  Wer trägt Verantwortung für Produktionsstabilität oder Fehleranalyse?  Wer hat mit 24x7x365-Anwendungen zu tun?  Wer musste schon Probleme debuggen, die erst in der Produktion beobachtet wurden?
  • 7. © 2010 kippdata informationstechnologie GmbH 7 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Aufwärmrunde – Wer sind Sie?  Wer hat in der Produktion  Java 1.4.2  Java 5  Java 6  Eine nicht-Sun VM  Wessen Code läuft nicht Standalone, sondern in einer Form von Container (Tomcat, Application Server, ...)?  Wer macht schon Monitoring für Java-Anwendungen?  Bei wem basiert HW-Kapazitätsplanung auf gemessenen Werten?  Gilt dies auch für das Sizing von SW-Komponenten (Pools etc.)?
  • 8. © 2010 kippdata informationstechnologie GmbH 8 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Aufwärmrunde – Wer sind Sie?  Wer weiß, was ein MBean ist?  Wer weiß, was ein Java Thread Dump ist?  Haben Sie schon ein Problem durch Thread Dumps gelöst?  Wer hat schon einmal zu einem Open Source-Projekt beigetragen?  Patch, Doku, Problemanalyse  Wer ist Projektmitglied bei einem Open Source-Projekt?
  • 9. © 2010 kippdata informationstechnologie GmbH 9 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Aufwärmrunde – Wer sind Sie?  Dieser Vortrag  Betrifft im wesentlichen Server-Anwendungen  Bezieht sich fast ausschließlich auf die Sun JVM  Java 5 und 6
  • 10. © 2010 kippdata informationstechnologie GmbH 10 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010  Aufwärmrunde  Motivation  Java Management Extensions (JMX)  JDK-Tools Java 5 und 6  Thread Dumps  Diskussion!
  • 11. © 2010 kippdata informationstechnologie GmbH 11 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Motivation – Monitoring  Ziele von Monitoring  Fehlererkennung, Rot/Grün-Ampeln, Alarmierung  Automatische Erkennung und Meldung kritischer Fehler  Möglichst keine Fehlalarme  Möglichst Meldung der Wurzelursache  Meist aber nur gut verstandene Basiszustände und End-to-End  Filesystem voll, CPU ausgelastet  Anwendungs-Login, Test-Transaktion
  • 12. © 2010 kippdata informationstechnologie GmbH 12 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Motivation – Monitoring  Weitere Ziele von Monitoring  Kontinuierliche Sammlung von Laufzeitwerten  Pollen der Daten  Ablage der Daten  Verdichtung und Visualisierung  Wird benötigt  zur Analyse der Wurzelursache bei wiederkehrenden Problemen  für Kapazitätsmanagement (z.B. Anpassung Sizing)
  • 13. © 2010 kippdata informationstechnologie GmbH 13 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Motivation – Monitoring  Die Betriebssicht  Den Betrieb interessiert meist nur die Meldung von Störungen (Incident Management)  Der Betrieb greift auf die Entwicklung zurück, wenn es um die Analyse komplexerer Probleme geht  Die Entwicklungssicht  Zur erfolgreichen Analyse von Betriebsproblemen benötigen Sie Auswertungen über das Zeitverhalten der Systemkomponenten  Diese muss der Betrieb bereitstellen
  • 14. © 2010 kippdata informationstechnologie GmbH 14 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Motivation – Troubleshooting  Troubleshooting: Die häufigsten technischen Probleme sind  Performance-Probleme  Schlechte Antwortzeiten  Schlechter Durchsatz  Stabilitäts-Probleme  Die Anwendung reagiert nicht mehr
  • 15. © 2010 kippdata informationstechnologie GmbH 15 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Motivation – Troubleshooting  Die häufigsten Problemursachen sind  Überlastete Backends  Locking-Probleme  Memory-Probleme (und schlechte GC-Einstellungen)  Falsches Sizing der eingesetzten Software-Komponenten  Pools, Caches, Timeouts  Fast nie: Engpass CPU, Platte oder Netz
  • 16. © 2010 kippdata informationstechnologie GmbH 16 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Motivation – Troubleshooting  Was wollen wir zur Laufzeit herausfinden?  Mit Monitoring  Welche Last wird abgearbeitet, wie sind die Antwortzeiten?  Wie ausgelastet sind die konfigurierten Softwarekomponenten?  Pools, Caches  Wie verhält sich die Garbage Collection?  Mit Java Thread Dumps  Warten wir auf andere Systeme (Backend, Datenbank, ...)?  Warten wir auf Locks (Software-Design)?  Loopen wir im Code?
  • 17. © 2010 kippdata informationstechnologie GmbH 17 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010  Aufwärmrunde  Motivation  Java Management Extensions (JMX)  JDK-Tools Java 5 und 6  Thread Dumps  Diskussion!
  • 18. © 2010 kippdata informationstechnologie GmbH 18 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Java Management Extensions (JMX)  Sehr gute Möglichkeit interne Applikationszustände von außen abfragbar zu machen  Größen (Pools etc.), Zähler (Anfragen, Dauern, Fehlerzahlen)  komplexe Datenstrukturen  Aber auch Konfigurationseinstellungen  Operationen möglich  Reset, Resizing, Loglevel ändern, Aktivierung/Deaktivierung, ...  Notifications (Emitter, Listener)  Ereignismeldung, z.B Schwellwertüberwachung
  • 19. © 2010 kippdata informationstechnologie GmbH 19 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Java Management Extensions (JMX)  Java-Standard  JMX Version 1.4 (Java 6, ohne optionale Connector-Teile)  JSR-3, Standardbestandteil ab Java 5, vorher etwa MX4J  JSR-160, Java Management Extensions Remote API  JSR-262 Web Services Connector for JMX Agents: Java 7?  Bislang aber nur „echte“ Web Services zu sehen  JSR-255 (JMX 2.0): verschoben auf Java 8!
  • 20. © 2010 kippdata informationstechnologie GmbH 20 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Java Management Extensions (JMX)  Bereitstellung der Informationen in Form von MBeans  In jeder Java Laufzeitinstanz liegen einige MBeans vor  Viele Container bringen weitere MBeans mit  Es ist nicht schwierig MBeans selbst bereitzustellen  Zentrale Registrierung am MBeanServer  die MBeans bekommen eindeutige Namen (ObjectName)  meist nur eine MBeanServer pro JVM  Remote Management (Connector, Adapter)
  • 21. © 2010 kippdata informationstechnologie GmbH 21 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Zugriff von außen auf den MBeanServer  Seit Java 6: „Attach on Demand“  Lokaler Zugriff ohne Vorbereitung (Rechte auf Prozess nötig)  Für Zugriff über Netz werden System Properties gesetzt  http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html#gdevf  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9876 ...  Wichtig: in Produktion bitte mit Zugangsschutz!  Firewalls nicht unproblematisch (RMI macht weitere Ports auf)  Lösung JMXServiceURL und JMXConnectorServer  Beispiel: JmxRemoteLifecycleListener.java seit Tomcat 6
  • 22. © 2010 kippdata informationstechnologie GmbH 22 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  JMX-Clients  JDK-Tools als Beispiele  Zugang über andere Konnektoren  Beispiele für Zugang via HTTP  JMXProxy in Tomcat  HTTP-Konnektor in MX4J  eigenes Servlet  jmxterm, Jmx4Perl, …  Nagios, Munin, ...: all have JMX plugins
  • 23. © 2010 kippdata informationstechnologie GmbH 23 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Kleine Demo …  Zugang via JConsole  Targets:  Sleep.java  JConsole selbst  Tomcat  Zugang via Browser  Targets:  Tomcat Manager/JMXProxy  Webapp kpdtexplorer
  • 24. © 2010 kippdata informationstechnologie GmbH 24 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Beispiele Tomcat  Thread Pools: Auslastung  Datenbank-Pools: Auslastung  Gesamtlast Requests, Verarbeitungsdauer Requests  Ableitung: Last/Durchsatz und mittlere Antwortzeit im letzten Messintervall  Anzahl Sessions pro Webapp  Aber auch  Aktuell in Bearbeitung befindliche URLs und bisherige Verarbeitungsdauer dieser Requests
  • 25. © 2010 kippdata informationstechnologie GmbH 25 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Auswertung  Es reicht nicht aus, interaktive Beobachtungen durchzuführen  Keine Historie, jeder User pollt für sich  ist aber häufig ein guter Einstieg!  Also: geeignete  geeignete Werkzeuge zum pollen und protokollieren auswählen  Schwellwerte festlegen  Auswerteverfahren aufsetzen (Visualisierung)
  • 26. © 2010 kippdata informationstechnologie GmbH 26 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Problembereiche  Skalare Attribute versus MXBeans (OpenMBeans)  Es werden zunehmend MBeans verwendet, die geschachtelte Daten zurückliefern  MXBeans erlauben es die Struktur der Daten herauszufinden  Viele Tools können das aber noch nicht  Wird zunehmend zu einem Auswahlkriterium  Deshalb soweit sinnvoll bei eigenen MBeans skalare Attribute verwenden
  • 27. © 2010 kippdata informationstechnologie GmbH 27 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Problembereiche  MBeans orientieren sich häufig an der Source Code-Struktur  Nicht immer optimale Granularität  Viele MBeans des gleichen Typs  Dies erhöht enorm die Poll-Last  Beispiel Webcontainer: Verwende kleine Webapp, die die gewünschten Datensätze in der richtigen Granularität liefert  Sie liefern nicht immer exakt die Daten, die wir sehen wollen, sondern die, die intern gerade vorliegen  Beispiel: Maximale Größe Pool und aktuelle Größe Pool statt prozentuale Auslastung  Einfache Ableitungen von Größen nötig (Quotienten, Differenzen, Quotienten von Differenzen)
  • 28. © 2010 kippdata informationstechnologie GmbH 28 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Java Management Extensions  Problembereiche  Das richtige Maß halten  Es gibt häufig zu viele MBeans  Was bedeuten die einzelnen MBean-Attribute?  Was wollen wir warum sehen?  Was fangen wir mit den Werten an?  Gibt es Schwellwerte für Gut/Schlecht?  Brauchen wir Aufzeichnungen für Auslastungsbetrachtungen (Sizing)
  • 29. © 2010 kippdata informationstechnologie GmbH 29 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010  Aufwärmrunde  Monitoring und Troubleshooting  Java Management Extensions (JMX)  JDK-Tools Java 5 und 6  Thread Dumps  Diskussion!
  • 30. © 2010 kippdata informationstechnologie GmbH 30 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 JDK-Tools Java 5 und 6  JDK-Tools Java 5 und 6  Immer JDK verwenden  alle relevanten Tools sind nicht im JRE!  Die Tools werden mit Patchreleases verbessert  ab und zu mal ein JVM-Patchupdate wäre schön  Tools basieren auf Java, bekommen aber JVM-Optionen mittels „-J“  -J-d64  -J-mx32m
  • 31. © 2010 kippdata informationstechnologie GmbH 31 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 JDK-Tools Java 5 und 6  Tools Java5  jps: welche Javaprozesse laufen  jstat: laufende Textausgabe von Werten aus dem Plattform-MBeans  jconsole: GUI zur Anzeige von MBeans  Kurze Demo  JConsole erweiterbar mit Plugins (Custom Tabs)  http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html#gdeje
  • 32. © 2010 kippdata informationstechnologie GmbH 32 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 JDK-Tools Java 5 und 6  Tools Java 6 (zusätzlich)  jinfo: Ausgabe und Manipulation von Flags  jstack: Ausgabe von Stack-Dumps  jmap & jhat: Dump and Analyse des Heaps  jvisualvm: mächtiges GUI, erweiterbar durch Plugins  Kurze Demo  JVisualVM erweiterbar mit Plugins  https://visualvm.dev.java.net/  Dort auch aktuellere Version verfügbar!
  • 33. © 2010 kippdata informationstechnologie GmbH 33 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 JDK-Tools Java 5 und 6  Diese Tools sind sehr gut, um sich einzuarbeiten  Welche Daten gibt es?  Wie verhalten sie sich?  Wie hängen sie zusammen?  Was davon interessiert mich? und die Kreativität anzuregen!  Oder auch um nicht vorbereitete Fragen ad hoc anzugehen  Das ist manchmal nötig
  • 34. © 2010 kippdata informationstechnologie GmbH 34 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 JDK-Tools Java 5 und 6  Diese Tools sind nicht geeignet für den dauerhaften Einsatz im Enterprise-Umfeld  Typische Anforderungen  dauerhaftes Sammeln von Daten  automatisierte Auswertung  Schwellwerte, Verdichtung, Visualisierung, Trends  Ergebnisse sollen persistent sein  zentrales Daten-Repository  zentrale Konfiguration  Anwendungs- und Container-Typen, Farmknoten, MBeans
  • 35. © 2010 kippdata informationstechnologie GmbH 35 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010  Aufwärmrunde  Monitoring und Troubleshooting  Java Management Extensions (JMX)  JDK-Tools Java 5 und 6  Thread Dumps  Diskussion!
  • 36. © 2010 kippdata informationstechnologie GmbH 36 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Problembeschreibung  Performanceprobleme  Anwendung ist zu langsam (einzelne Vorfälle)  Es bilden sich Staus aus  und dann meist als Folge Stabilitätsprobleme  Anwendung reagiert nicht mehr  Fragen  Wo kommen die Performance-Probleme her?  Warten auf Locks, Fremdsysteme?  Intensive Berechnungen?  Wo kommt ein zu hoher CPU-Verbrauch her (bei Extremen)?
  • 37. © 2010 kippdata informationstechnologie GmbH 37 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Performance-Probleme bei verteilten Systemen  Die Ursache ist nicht meine Komponente A, es ist wohl B  Die Ursache ist nicht meine Komponente B, es ist wohl C  Die Datenbank C langweilt sich  Dann ist es wohl das Netz!  Die Erfahrung zeigt: meistens nicht. A A B B C
  • 38. © 2010 kippdata informationstechnologie GmbH 38 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Inhalt eines Thread-Dumps  Ein Thread-Dump ist eine Momentaufnahme der Code- Ausführung in der JVM  Er enthält eine Liste aller Threads in der JVM  Mit Name und ID, sowie Zustand (etwa runnable)  ID meist abbildbar auf die Thread-Nummern des OS  Mit komplettem Funktionsstack der Java-Methoden  Mit Informationen bzgl. des Wartens auf Locks  Mit Ausgabe, ob ein Deadlock vorliegt
  • 39. © 2010 kippdata informationstechnologie GmbH 39 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Momentaufnahme  Meist muss mehr als ein Thread-Dump gemacht werden, um Zufallsbeobachtungen auszuschliessen  Z.B. 3 Dumps im Abstand von jeweils 3 Sekunden  Thread-Dumps sind ein JVM-Feature  Klappt also für alle Java-Prozesse!  Thread-Dumps gehen sehr schnell  Thread-Dumps sind OK in Produktion! (ca. ab 1.4.2_10)  Auch regelmäßig (alle 10 Minuten; nicht: Sekunden)
  • 40. © 2010 kippdata informationstechnologie GmbH 40 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Tipp: Wegschreiben von 3 Thread Dumps ins Stopp- Skript aufnehmen  Gerade unter Stress wird nicht daran gedacht vor dem Neustart noch Dumps zu machen  Wohin geht der Dump?  Nach STDOUT  Im Startskript auffangen  Zeitstempel hinzufügen  Rotieren
  • 41. © 2010 kippdata informationstechnologie GmbH 41 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Wie wird ein Dump erzeugt?  Unix/Linux: sende QUIT-Signal an Prozess  Das darf der root-User und der Owner des Prozesses  Es beendet nicht den Prozess! Der Name ist irreführend.  Windows: send Break-Signal an den Prozess  Das darf nur ein Prozess, der in der gleichen Console-Gruppe wie die JVM ist  Meist nur auf Entwickler-PC oder in speziellen Fällen in Produktion so machbar  Start über DOS-Box  Demo: Tomcat
  • 42. © 2010 kippdata informationstechnologie GmbH 42 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Was machen wir bei einem Windows-Service?  Hat kein Terminal, deshalb klappt Break-Signal nicht  Ab Java 5 gibt es einen programmatischen Weg, aus der Java-Anwendung heraus Thread-Dumps aufzurufen  java.lang.management.ThreadMXBean  Der Dump ist etwas weniger aussagekräftig  Weniger Lock-Information (besser ab Java 6)  Weniger IDs zum Thread  Keine JVM-internen Threads
  • 43. © 2010 kippdata informationstechnologie GmbH 43 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Aufrufmöglichkeiten MBean-basierter Thread-Dump  Aufrufbar über JMX-Schnittstelle  Ab Java 6 ohne vorherige Aktivierung der Schnittstelle (Attach on Demand)  jstack (kann aber keine Authentisierung)  <JDK_HOME>/demo/management/FullThreadDump/FullThreadDump.jar  Eigener Client  Oder kapseln in HTTP-Servlet oder ähnlichem Aufrufweg  Demo: kpdtexplorer
  • 44. © 2010 kippdata informationstechnologie GmbH 44 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Ausgabe Deadlock Deadlock found :- "ajp-127.0.0.1-8009-42" Id=486 in BLOCKED on lock=java.lang.Object@1d461d7  owned by ajp-127.0.0.1-8009-38 Id=460  at jcifs.smb.SmbTree.treeConnect(SmbTree.java:128)  at jcifs.smb.SmbTree.send(SmbTree.java:64)  at jcifs.smb.SmbTree.treeDisconnect(SmbTree.java:168)  at jcifs.smb.SmbSession.logoff(SmbSession.java:301)  at jcifs.smb.SmbTransport.getSmbSession(SmbTransport.java:138)  at jcifs.smb.SmbSession.logon(SmbSession.java:167)  at jcifs.smb.SmbSession.logon(SmbSession.java:162) ... "ajp-127.0.0.1-8009-38" Id=460 in BLOCKED on lock=jcifs.smb.SmbTransport@14cfb2c  owned by ajp-127.0.0.1-8009-42 Id=486  at jcifs.smb.SmbTree.treeConnect(SmbTree.java:130)  at jcifs.smb.SmbSession.logon(SmbSession.java:169)  at jcifs.smb.SmbSession.logon(SmbSession.java:162) ...
  • 45. © 2010 kippdata informationstechnologie GmbH 45 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Konsequenz Deadlock  Über 400 Threads im Stack "ajp-127.0.0.1-8009-750" Id=2382 in BLOCKED on lock=jcifs.smb.SmbTransport@14cfb2c  owned by ajp-127.0.0.1-8009-42 Id=486  at jcifs.util.transport.Transport.connect(Transport.java:151)  at jcifs.smb.SmbTransport.connect(SmbTransport.java:287)  at jcifs.smb.SmbSession.getChallenge(SmbSession.java:146)  at jcifs.smb.SmbSession.getChallenge(SmbSession.java:140) ...  Entstanden innerhalb weniger Minuten  Keine Neuanmeldung mehr möglich  Obwohl nur zwei Threads im Deadlock sind, bleiben sehr viele Threads dahinter hängen
  • 46. © 2010 kippdata informationstechnologie GmbH 46 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Entwickler-Kommentar zu diesem Deadlock „I believe the deadlock could only be triggered by a contrived test that creates an excessive number of threads that would never been used in a normal application.“  dict.leo.org: contrived = arrangiert, erfunden, gekünstelt, gestellt  Hier war es normale Produktion!
  • 47. © 2010 kippdata informationstechnologie GmbH 47 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Lock-Contention  Viele Threads im Stack "ajp-127.0.0.1-8009-XXX" Id=YYY in TIMED_WAITING on lock=com.mybiz.myapp.webapp.handler.FormHandler@be635d  at java.lang.Object.wait(Native Method)  at com.mybiz.myapp.webapp.handler.FormHandler.lock(Unknown Source)  at com.mybiz.myapp.webapp.UpdateAction.execute(Unknown Source)  at com.mybiz.myapp.webapp.ActionBase.execute(Unknown Source)  at org.apache.struts.action.RequestProcessor. processActionPerform(RequestProcessor.java:484)  at org.apache.struts.action.RequestProcessor. process(RequestProcessor.java:274)  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) ...  Die Thread-IDs XXX und YYY wechseln langsam im Laufe der Zeit
  • 48. © 2010 kippdata informationstechnologie GmbH 48 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Dump-Auswertung  Meist sehen wir uns zunächst nur die obersten 5-10 Methoden des Stacks an  Wir wollen alle Threads gruppieren, deren Top-N Methoden- Stack gleich ist  Was machen die meisten Threads gerade?  Hier bietet sich ein Auswerteskript an  Bei Ideen, was merkwürdig sein könnte, immer die Idee im vollen Dump überprüfen  Demo Stack-Statistik im kpdtexplorer
  • 49. © 2010 kippdata informationstechnologie GmbH 49 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Phänomene, die sich meist gut durch Thread-Dumps verstehen lassen  Die Anwendung ist insgesamt langsam, obwohl die CPU- Auslastung gering ist  Dann wird meistens auf etwas gewartet  Remote Calls (Middleware, DB, Webservices)  Locks  Lieblingsformel Durchsatz * Antwortzeit = Parallelität  Normale Anfragerate, erhöhte Antwortzeit => erhöhte Threadzahl
  • 50. © 2010 kippdata informationstechnologie GmbH 50 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Phänomene, die sich meist gut durch Thread-Dumps verstehen lassen – Fortsetzung  Die CPU-Auslastung ist zu hoch  Was ist auf der CPU (Thread-Nummer)  Was macht der Thread?  Die Anwendung reagiert nicht mehr  Deadlock?  Alle Threads warten auf remote?
  • 51. © 2010 kippdata informationstechnologie GmbH 51 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Thread Dumps  Vorschlag  Trauen Sie Sich Thread-Dumps in der Produktion zu machen  Natürlich erst im Test bzw. Staging  Bei wichtigen Anwendungen auch proaktiv und regelmässig  Betrieb und Entwicklung sollten zusammen versuchen die Dumps zu verstehen  Insbesondere auch im Gut-Fall  Lassen Sie Sich nicht von der Größe abschrecken  Skript zum Zusammenfassen gleicher Top-N-Stacks
  • 52. © 2010 kippdata informationstechnologie GmbH 52 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010  Aufwärmrunde  Motivation  Java Management Extensions (JMX)  JDK-Tools Java 5 und 6  Thread Dumps  Diskussion!
  • 53. © 2010 kippdata informationstechnologie GmbH 53 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Diskussion  Fragen?
  • 54. © 2010 kippdata informationstechnologie GmbH 54 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010  Abspann
  • 55. © 2010 kippdata informationstechnologie GmbH 55 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 kippdata – Kontakt  Wie können wir Ihnen helfen?  So erreichen Sie uns:  info@kippdata.de  rainer.jung@kippdata.de  www.kippdata.de  0228/98549-0
  • 56. © 2010 kippdata informationstechnologie GmbH 56 Java Monitoring und Troubleshooting – Rainer Jung – OSMC 2010 – 06.10.2010 Abspann  kippdata informationstechnologie GmbH  Professioneller Open Source Support  Schwerpunkt Apache Tomcat und Apache httpd  Betriebskonzepte zu Hochlast und Ausfallsicherung  Healthchecks von produktiven JEE-Anwendungen  Lasttests und Sizing, Analyse von Produktionsproblemen  Workshops  Besuchen Sie uns auf www.kippdata.de, und www.kippdata.de/tomcat