Mist gemessen? Java Performance und Memory AnalyseDr. Halil-Cem Gürsoy             adesso AG
Der Referent• Insgesamt über 10 Jahre Beratung und Entwicklung  rund um Java, davor Entwicklung im  Forschungsumfeld• Seni...
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
Was ist „Messen“? Eine Messung ist das Ausführen von geplanten Tätigkeiten zu einer quantitativen Aussage über eine Messgr...
Wie wird gemessen?• Was ist das Messproblem?• In welcher Einheit wird gemessen?• Messeinrichtung / Messgerät• Kalibirierun...
Ein paar Anregungen…• Ein beobachtetes System verändert sich durch die  Messung• Heisenbergsche Unschärferelation  • Ort u...
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
"Performance"• WAS ist „Performance“?• „Gefühlte Performance“• Durchsatz – z.B.  • Transaktionen / sec.  • Anzahl verarbei...
Toolbasiertes Stressen & Messen• Diverse freie Tools zum „Vermessen“ von  Applikationen:  • JMeter  • Grinder  • OpenSTA  ...
JMeter…• …kann mehr als nur Web-Applikationen vermessen:  • Datenbankzugriffe  • JMS  • Webservices• Leicht zu erweiternHe...
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
Ursachenforschung…• Tatsächlich alles richtig gemessen… (?)• Ergebnis: es gibt tatsächlich ein Performance-  Problem• Was ...
Wo geht die Zeit verloren?• Es kann viele Ursachen geben• „Schlechter Code“  • Blick in diverse Antipattern Blogs / Artike...
Manuell Messen• Auswertung von Logfiles  • Zeiten zwischen Logausgaben  • Gezielte Logausgaben mit Zeitangaben  • AOP / In...
Eine Datenbank mit I/O-ProblemenHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   16
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
JVisualVM• Es gibt viele Tools, z.B. JProbe u.a.• JVM TI ist neue Schnittstelle innerhalb der JVM• Geschenkt: JVisiualVM• ...
JVisualVM – Verbinden• Lokale, laufende JVM‘s unter dem gleichen User  werden automatisch gefunden• Remote-JVM‘s  • Starte...
Monitoren der BasisdatenHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   20
Tomcat unter LastHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   21
ThreadsHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   22
SamplerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   23
Tomcat…• Simple Methode um CPU und Speicher zu  verbrauchen:  public static String generateLongString() {    String result...
Sampler-ErgebnisHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   25
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
Memory Probleme• Häufig treten Memory und Performance-Probleme  gemeinsam auf• Memory-Probleme werden in der Entwicklung n...
Heap Dumps• Wichtiges Werkezeug um aktuelle Speichersitaution  einzufangen und zu analysieren• Heap Dumps erzeugen mit…  •...
GC und Performance• GC kostet CPU-Zeit• Sichtbar: „die Welt steht“ („Stop the World“)• Es gibt verschiedene GC‘s  • leider...
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
Sampler… String in SessionHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   31
GC in JVisualVMHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   32
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
Eclipse Memory Analyzer (MAT)• Standalone (RCP) und als Plugin• Bei großen Heap Dumps RCP mit hohen Memory-  Settings verw...
MAT – OverviewHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   35
MAT• Leak Suspects Report  • Analysiert Heap Dump nach möglichen Memory Leaks• Top Components  • Alle Komponenten die > 1%...
MAT – Domintor TreeHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   37
MAT – OQL• Mit Hilfe von OQL  ist gezielte Suche  nach  Speicherverbrauch  von bestimmten  Objekten möglich• Syntax sehr  ...
MAT – Viele Funktionen• MAT bietet sehr viel Funktionalität  • Suche nach GC Roots  • Referenz-Zusammenfassungen  • Ggfs. ...
Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen  • Manuell  • JVisualVM• Memory-Probleme  • JVis...
IBM Heap Dump Anaylzer• “IBM Thread and Monitor Dump Analyzer for  Java”  • http://www.alphaworks.ibm.com/tech/jca• Mein “...
IBM HDAHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse   42
Weitere Tools (teilweise veraltet)• IBM Diagnostic Tool for Java Garbage Collector  • Für IBM JDK  • http://www.alphaworks...
Vielen Dank!Dr. Halil-Cem Gürsoy                 adesso AG halil-cem.guersoy [at] adesso.de & @hgutwit
adesso AG• Sponsor Herbstcampus 2010• Mitarbeiter  • Über 750 Mitarbeiter in der adesso Group• Umsatz  • Umsatzerwartung 2...
Upcoming SlideShare
Loading in …5
×

Mist gemessen? Java Performance und Memory Analyse

2,977 views
2,895 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,977
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Mist gemessen? Java Performance und Memory Analyse

  1. 1. Mist gemessen? Java Performance und Memory AnalyseDr. Halil-Cem Gürsoy adesso AG
  2. 2. Der Referent• Insgesamt über 10 Jahre Beratung und Entwicklung rund um Java, davor Entwicklung im Forschungsumfeld• Senior Software Engineer bei adesso AG, Dortmund• Schwerpunkt EAI und SOA-Projekte im JEE Umfeld, aber auch klassische JEE-Projekte• Autor und Referent auf KonferenzenHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 2
  3. 3. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 3
  4. 4. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 4
  5. 5. Was ist „Messen“? Eine Messung ist das Ausführen von geplanten Tätigkeiten zu einer quantitativen Aussage über eine Messgröße durch Vergleich mit einer Einheit. Dabei ist die Messgröße jene physikalische Größe, der die Messung gilt. Die Bezeichnungen für die Messtechnik werden in der DIN-Norm DIN 1319 definiert.Quelle: wikipedia.deHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 5
  6. 6. Wie wird gemessen?• Was ist das Messproblem?• In welcher Einheit wird gemessen?• Messeinrichtung / Messgerät• Kalibirierung• Messablauf definieren• Durchführung und Messergebnis• Fehlerrechnung (Messunsicherheiten, Fehlergrenzen usw.)Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 6
  7. 7. Ein paar Anregungen…• Ein beobachtetes System verändert sich durch die Messung• Heisenbergsche Unschärferelation • Ort und Impuls nicht gleichzeitig exakt messbar• „Quantenselbsmord“ • Schrödingers Katze etwas weiterentwickelt • Der selbstmordende Wissenschaftlicher ist am Ende „nur ein bisschen Tot“ • Also lebt Elvis doch… wenn auch nur ein bisschen!Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 7
  8. 8. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 8
  9. 9. "Performance"• WAS ist „Performance“?• „Gefühlte Performance“• Durchsatz – z.B. • Transaktionen / sec. • Anzahl verarbeitete Nachrichten, • Einhaltung von „Zeitfenstern“ • Häufig nichtfunktionale Anforderungen im Projekt• Viele Wege zum Messen…Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 9
  10. 10. Toolbasiertes Stressen & Messen• Diverse freie Tools zum „Vermessen“ von Applikationen: • JMeter • Grinder • OpenSTA • Derivate von JUnit• Messungen eher „Grobgranular“• Aufruf „Seite XY“ oder „ServiceZ“ dauert zu langeHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 10
  11. 11. JMeter…• …kann mehr als nur Web-Applikationen vermessen: • Datenbankzugriffe • JMS • Webservices• Leicht zu erweiternHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 11
  12. 12. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 12
  13. 13. Ursachenforschung…• Tatsächlich alles richtig gemessen… (?)• Ergebnis: es gibt tatsächlich ein Performance- Problem• Was ist die Ursache?Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 13
  14. 14. Wo geht die Zeit verloren?• Es kann viele Ursachen geben• „Schlechter Code“ • Blick in diverse Antipattern Blogs / Artikel / Bücher • Klassiker • String, StringBuffer • compareTo() • resultSet.close() • XML-Parser • JNDI Lookups • JDBCHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 14
  15. 15. Manuell Messen• Auswertung von Logfiles • Zeiten zwischen Logausgaben • Gezielte Logausgaben mit Zeitangaben • AOP / Interceptoren • Aufwändige Analyse, schwer Daten zu aggregieren @|03.09.2010 16:59:15.899|[[ACTIVE] ExecuteThread: 6 for queue: weblogic.kernel.Default (self- tuning)]|DEBUG|CorrID[9d4e92197bc54b6f]|de.adesso.hgu.hcex.busines s.interceptor.ProfilingInterceptor|profile|46|Methode public long de.adesso.hgu.hcex.facade.SimpleBean.validate(de.adesso.hgu.hcex.ut il.MDCWrapper,java.lang.String) throws de.adesso.hgu.hcex.business.exception.ValidationException ausgefuehrt in 76msHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 15
  16. 16. Eine Datenbank mit I/O-ProblemenHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 16
  17. 17. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 17
  18. 18. JVisualVM• Es gibt viele Tools, z.B. JProbe u.a.• JVM TI ist neue Schnittstelle innerhalb der JVM• Geschenkt: JVisiualVM• Teil der SUN JDK und unter https://visualvm.dev.java.net/• Features • Konfiguration der Applikations-Runtime • Performance Monitor • Memory Monitor • Thread Monitor • Offline AnalyseHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 18
  19. 19. JVisualVM – Verbinden• Lokale, laufende JVM‘s unter dem gleichen User werden automatisch gefunden• Remote-JVM‘s • Starten von jstatd auf dem Remote-System. Muss unter dem gleichen User wie die JVM laufen • Starten der Applikation mit den Systemparametern • com.sun.management.jmxremote.port • com.sun.management.jmxremote.ssl • com.sun.management.jmxremote.authenticateHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 19
  20. 20. Monitoren der BasisdatenHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 20
  21. 21. Tomcat unter LastHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 21
  22. 22. ThreadsHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 22
  23. 23. SamplerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 23
  24. 24. Tomcat…• Simple Methode um CPU und Speicher zu verbrauchen: public static String generateLongString() { String result = new String(); for (int i = 0; i < 10000; i++) { result = result + "dummy" + i + "<br>"; } return result; }Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 24
  25. 25. Sampler-ErgebnisHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 25
  26. 26. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 26
  27. 27. Memory Probleme• Häufig treten Memory und Performance-Probleme gemeinsam auf• Memory-Probleme werden in der Entwicklung noch häufiger ignoriert als Performance-Probleme • Testumgebungen laufen nicht lang genug • zu wenig Testdaten• Analyse in einer produktiven Umgebung schwierig• Häufig beobachtete Dauer-Zwischenlösung • Application Server Reboots (täglich, stündlich…)Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 27
  28. 28. Heap Dumps• Wichtiges Werkezeug um aktuelle Speichersitaution einzufangen und zu analysieren• Heap Dumps erzeugen mit… • -XX:-HeapDumpOnOutOfMemoryError und dazugehörige Optionen • erzeugt Heap Dumps bei einer OOME • Jmap , JConsole, JVisualVM – Teile der SUN JDK • Über JMX • TastenkombinationenHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 28
  29. 29. GC und Performance• GC kostet CPU-Zeit• Sichtbar: „die Welt steht“ („Stop the World“)• Es gibt verschiedene GC‘s • leider immer noch eine Erwähnung wert! • Default-Einstellungen abhängig von System, CPU & Speicher• Abhängig vom Einsatzszenario• Durchsatzoptimiert = „Stop the World“• Ziel: Minimierte Pausen • kostet aber Durchsatz! • auch in G1 (wenn auch kurz)Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 29
  30. 30. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 30
  31. 31. Sampler… String in SessionHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 31
  32. 32. GC in JVisualVMHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 32
  33. 33. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 33
  34. 34. Eclipse Memory Analyzer (MAT)• Standalone (RCP) und als Plugin• Bei großen Heap Dumps RCP mit hohen Memory- Settings verwenden, sonst schnell OOME !• Kann Heap Dumps von SUN & IBM JDK‘s auswerten• Ähnlich JVisualVM anfordern von Heap Dumps• Unterstützt OQL (Object Query Language)Herbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 34
  35. 35. MAT – OverviewHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 35
  36. 36. MAT• Leak Suspects Report • Analysiert Heap Dump nach möglichen Memory Leaks• Top Components • Alle Komponenten die > 1% des Heaps belegen• Component Report • Identifiziert z.B. vervielfachte Strings, leere Collections usw.• Histogramm / Dominator Tree • Speicherverbrauch herunter gebrochen auf einzelne InstanzenHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 36
  37. 37. MAT – Domintor TreeHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 37
  38. 38. MAT – OQL• Mit Hilfe von OQL ist gezielte Suche nach Speicherverbrauch von bestimmten Objekten möglich• Syntax sehr einfach… analog SQLHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 38
  39. 39. MAT – Viele Funktionen• MAT bietet sehr viel Funktionalität • Suche nach GC Roots • Referenz-Zusammenfassungen • Ggfs. wichtige Hinweise warum ein Objekt nicht weggeräumt wird!• Für schnelle Analysen sind die Reports geeignet• Tiefergehende Analysen benötigen einiges an EinarbeitungHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 39
  40. 40. Agenda• Über das Messen• Performance• Messungen bei Performance-Problemen • Manuell • JVisualVM• Memory-Probleme • JVisualVM • MAT • IBM Heap Dump AnalyzerHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 40
  41. 41. IBM Heap Dump Anaylzer• “IBM Thread and Monitor Dump Analyzer for Java” • http://www.alphaworks.ibm.com/tech/jca• Mein “Favorit“ für schnelle Analysen• Unterstützt (inzwischen) SUN & IBM JDK Heap Dumps im hprof-Format• Bietet suche nach Leaks• Übersichtlich, aber nicht so detailverliebt wie MAT = PragmatischHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 41
  42. 42. IBM HDAHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 42
  43. 43. Weitere Tools (teilweise veraltet)• IBM Diagnostic Tool for Java Garbage Collector • Für IBM JDK • http://www.alphaworks.ibm.com/tech/gcdiag• jhat – Heap Dump Browser, Teil der SUN JDK• Jconsole – Teil der SUN JDK • Funktionalität durch JVisualVM abgedeckt• HPROF • http://java.sun.com/developer/technicalArticles/Programmin g/HPROF.html • Sehr rudimentäres Profiling-Tool, Analyse mit perfanal • Option -XrunhprofHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 43
  44. 44. Vielen Dank!Dr. Halil-Cem Gürsoy adesso AG halil-cem.guersoy [at] adesso.de & @hgutwit
  45. 45. adesso AG• Sponsor Herbstcampus 2010• Mitarbeiter • Über 750 Mitarbeiter in der adesso Group• Umsatz • Umsatzerwartung 2010: > 79 Mio. Euro• Auszeichnungen • Platz 18 der deutschen Top-25 Beratungs- und Systemintegrationsunternehmen (Lünendonk-Liste 2010) • Top Job (2008) • Deutschlands beste Arbeitgeber (2005 und 2010)• Standorte in Dortmund, Köln, Aachen, Stuttgart, Hamburg, Berlin, Frankfurt, München sowie in der Schweiz und ÖsterreichHerbstcampus 2010 – Mist gemessen? – Java Performance und Memory Analyse 45

×