Java EE 5 Performance DRV Jahrestagung Java Würzburg 25.2.2008 Mirko Novakovic, codecentric GmbH
Agenda 1. Java EE 5 Überblick 2. Performance und Java EE EJB und Persistence Web Services und Remoting Web Tier 3. Java EE Performance Best Practices Architektur und Design Prozesse Monitoring und Diagnose Tools (Demo) 4. Fragen und Antworten 2
Portfolio performance Technische Qualitätssicherung mit den Schwerpunkten Performance und Verfügbarkeit. Analyse und Optimierung von Java Performance und Memory Problemen. Performance Engineering aus der Praxis und mit jahrelanger Erfahrung. architecture Beratung und Entwurf von Software Architekturen mit Schwerpunkt Web- und Serviceorientierten Architekturen. Durchführung von Architekturreviews für die Risikoanalyse in Projekten und zur Ermittlung von Optimierungspotentialen. open technology Beratung im Bereich Open Source Technologien und Frameworks. Entwicklung von Portal, Content Management und SOA Projekten im Java Enterprise Umfeld. Workshops und Schulungen zum Zwecke eines Knowhow Transfers an unsere Kunden. Zertifizierte Experten für JBoss Technologien und das Springframework. 3
performance Last- und Performancetest Performance Analyse Performance Tuning Performance Tools Green IT Praxiserorbtes Vorgehensmodell itko Lisa, HP/Mercury Loadrunner, JMeter Management des gesamten Performance Engineering Lifecycles Partner von Quest, dynatrace und CA/Wily Publikationen, Vorträge und Schulungen Verhindern von Fingerpointing Schulungen und Mentoring Zertifizierte Experten Erfahrung aus vielen Troubleshooting Einsätzen Schnell und zuverlässig mit Erfolgsgarantie Java Performance Tuning Workshop Partner der führenden Hersteller Schnelle und zielführende PoCs Erfahrene und zertifizierte Berater Wissenstransfer und Schulungen Analyse der Infrastruktur und Software Ermittlung von Optimierungspotential Reduktion der Hardware und Software Kosten Bessere Performance und Skalierbarkeit 4
1. JAVA EE ÜBERBLICK 5
Java EE Überblick - APIs 6
Java EE Überblick Interessante Neuerungen EJB3 POJO basierter Ansatz mit Dependecy Injection Java 5 Annotation Support Java Persistence API (JPA) mit portablem Entity Manager JavaServer Faces Web User Interface Framework GUI Komponenten Page Navigation, Validation, etc. Erweiterter WebService Support Viele Vereinfachungen in der Entwicklung von POJO basierten WebServices 7
Java EE Multitier Applikationen - Schichten 8
Java EE Multitier Applikationen - Kommunikation 9
Java EE Multitier Applikationen Operationale Sicht Web Tier Java EE Applikation Java EE Applikationsserver Java SE Virtual Maschine Betriebssystem Application Tier Java EE Applikation Java EE Applikationsserver Java SE Virtual Maschine Betriebssystem Java EE Applikation Java EE Applikationsserver Java SE Virtual Maschine Betriebssystem SOAP, HTTP, JRMP, IIOP Java EE Applikation Java EE Applikationsserver Java SE Virtual Maschine Betriebssystem 10
Java EE und SOA Java ist die führende Plattform für SOA Anwendungen Oracle/BEA IBM WebSphere Open Source (JBoss, Glassfish, Mule) Erweiterungen von Java EE um weitere Standard -Komponenten Portal Server Business Process Server Business Rules Management Systeme Enterprise Service Bus Service Registries und Governance Software 11
Java EE und weitere Standards Service Componente Architecture (SCA) www.osoa.org Modell für die Erstellung von SOA Anwendungen Implementierungen in vielen Standards möglich (Spring, POJO, EJB, WS, COBOL, C, C++, ) IBM, BEA, Oracle, SAP, IONA, Sun, Software AG, Service Data Objects (SDO) Vereinfachung des Datenzugriffs und der Datenverwaltung in Applikationen OSGI Serviceorientierter, komponentenbasierter Ansatz Dynamisches Laden und Deployment von Modulen inkl. Versionen Hohe Entkoppelung der Module Springframework defacto Standard Alternative zu Java EE 12
2. PERFORMANCE UND JAVA EE 13
Java EE Performance Probleme Performance Probleme im Java EE Bereich sind häufig Resultat einer sehr hohen Komplexität der Architektur und der eingesetzten Software Komponenten und Frameworks viele logischer und physikalischer Schichten Die häufigsten Java EE Performance Probleme sind (Top 5) 1. Memory Leaks und GC Overhead 2. O/R Mapping und DB Zugriff 3. Remoting und Verteilung 4. Ineffiziente GUI/Web Entwicklung 5. Unnötiger/Falscher Einsatz von Software Komponenten 14
Java EE Performance O/R Mapping und DB Zugriff Java Persistence API Entstanden aus JSR-220 (EJB 3.0) POJO basiertes O/R Mapping Framework als Ersatz für EJB 2.x CMP Entity Beans Viele Ähnlichkeiten mit Hibernate Einfaches Annotation basierte Entwicklung @Entity public class Flight implements Serializable { Long id; @Id public Long getid() { return id; } } public void setid(long id) { this.id = id; } 15
JPA Performance Funktionsweise verstehen Fetch Strategien Häufiges Problem ist, dass die Funktionsweise von JPA Implementierungen nicht zu 100% verstanden wird Frage: Wie viele und welche SQL Statements werden erzeugt? Fetch Strategien verstehen fetch=eager alle Assoziationen werden mit der Entität geladen. fetch=lazy - die Assoziationen werden erst beim Zugriff geladen Erweiterte Fetch Strategien am Beispiel Hibernate Definition ob Eager-Fetch mit JOIN oder einzelnen SELECT Statements erfolgen soll BatchFetch (@BatchSize=x) es werden mehrere Entitäten des selben Typs geladen 16
JPA Performance Funktionsweise verstehen - Cascading Cascade verstehen Das CASCADE Attribute legt fest, welche Operationen auf Referenzierte Objekte mit ausgeführt werden CASCADE=ALL bedeutet, dass alle Operationen auf die Sub-Entitäten mit ausgeführt werden. Cascading kann auf bestimmte Operationen eingeschränkt werden beispielsweise: CASCADE=PERSIST Erweiterte Fetch Strategien am Beispiel Hibernate CASCADE=DELETE_ORPHAN Legt fest, dass nur die DELETE Operationen nur an gelöschte Referenzen weitergeleitet werden 17
JPA Performance Caching Caching ist in vielen Fällen eine sehr effektive Form die Performance zu verbessern. Je read -lastiger eine Entität ist, desto höher ist der Performance Gewinn. Gerade bei Schlüsselwerten (z.b. Länderliste) kann der Cache die Anzahl SQL Statement deutlich reduzieren Caching ist nicht Teil der JPA Spezifikation und daher von Anbieter zu Anbieter unterschiedlich 18
JPA Performance Hibernate Caching First Level Cache (Persistence Context) Cache der Entitäten innerhalb einer Transaktion Second Level Cache Cache der Entitäten Context übergreifend Unterschiedliche Implementierungen: EHCache, JBoss Cache, Oracle Coherence Cache auf Basis des Primärschlüssels Clustering des Cache möglich Overhead durch Replikation beachten Query Cache Caching von Query Ergebnissen Nur IDs werden gecached und dann über Second Level Cache geladen Applikation Hibernate-Session First-Level-Cache Second-Level-Cache JDBC Datenbank 19
JPA Performance JDBC Tuning DB Spezifische Funktionen nutzen Der Datenbankhersteller wird nur sehr selten gewechselt Trade-Off zwischen Portierbarkeit und Performance JDBC Treiber Parameter optimieren z.b. Prepared Statement Cache Optimierung der Abfragen, Indizes und Tabellen Analyse der Datenbank EXPLAIN verwenden DBA frühzeitig mit einbeziehen Isolation Level richtig verwenden 20
Remoting Performance - Probleme Probleme treten in der Entwicklung nicht auf Bandbreiteneinschränkung und Latenzzeit am Produktivsystem Verteilung von EJBs auf mehrere Container Hohe Anzahl Remote Aufrufe Missachtung von Datenlokalitätsregeln Synchronisation am Server Einsatz ungeeigneter Remoting Technologie 21
Remoting Performance Protokolle Es existieren unterschiedliche Architekturen und Protokolle für den Remote Zugriff aus Komponenten und Services Remote Methode Invocation (RMI) JRMP Java proprietäres Protokoll IIOP GIOP Protokoll T3, ORMI Vendor spezifische Protokolle (BEA/Oracle) WebServices SOAP Hessian Spring HttpInvoker ReST HTTP Messaging JMS Tibco Rendevouz 22
Remoting Performance Ein Performance Vergleich RMI/JRMP Objekte werden direkt auf den TCP/IP Socket serialisiert Kaum Speicherverbrauch Beste Performance RMI/IIOP Objekte werden zuerst im Speicher serialisiert Signifikante Speicheranforderungen 10-50% langsamer als RMI/JRMP HTTP/SOAP Objekte werden zuerst im Speicher serialisiert und in das SOAP Protokoll gebracht String-Darstellung stellt signifikante CPU und Speicheranforderungen 2-10x langsamer als RMI/JRMP 23
Remoting Performance Architektur Verteilung von Anwendungen sollte immer Anforderungsgetrieben erfolgen Skalierbarkeit Ausfallsicherheit Vermeidung von Interferenzen Innerhalb gleicher Technologien und eines Unternehmens sollte das Protokoll richtig gewählt werden SOA!= SOAP Besser RMI/JRMP wählen z.b. mit EJB3 Session Beans Bei EJB3 Session Beans kann zunächst mit lokalen Zugriffen gearbeitet und später einfach auf einen Remote Zugriff gewechselt werden 24
Remoting Performance Multilayering Antipattern Client ViewObject View ValueObjects Business Facades Field-Mapping Business Objects TransferObjects Backend/DB Problematik Zeitverlust beim Mapping und Konvertieren von Daten Cycling Object Problematik und hohe GC Belastung Lösung Angemessene Anzahl Schichten verwenden Neue Framework Ansätze wie JBoss Seam nutzen 25
Remoting Performance JBoss Seam Ein Java EE 5 Framework Mehr als ein MVC Framework. Füllt die Lücke zwischen JSF und EJB3 im Java EE 5 Standard Annotation basiertes Dependency Injection Framework Eingebauter Support für AJAX (RichFaces) Integration vieler Standards und Frameworks EJB3/Hibernate jbpm JBoss Rules JSF/Facelets/RichFaces Groovy Support Caching (JBoss Cache) itext, WebServices, Email, Security 26
Web Tier Performance Web Frontend Performance Einfluss von HTML GUIs wird unterschätzt Latenzzeiten und Bandbreitenengpässe WLAN, GPRS, UMTS Große Anzahl Server Roundtrips AJAX Neuladen kompletter HTML Seiten Große Seiten und Datenmengen Bilder, CSS, Javascript, 27
Web Tier Performance Beispiel: Ladezeit von www.yahoo.com 28
Web Tier Performance HTML Tuning Anzahl der Requests reduzieren Nur wenige Dateien verwenden, d.h. CSS und Javascript Dateien kombinieren und Image-Maps verwenden Expires-Header verwenden, um HTTP 304 Anfragen zu vermeiden HTML Größe reduzieren Content kann ab HTTP 1.1 gezipped werden Javascript und CSS in externe Dateien Fachliche Aufteilung der Masken Nur Felder anzeigen, die in 80% der Fälle benötigt werden Listeninhalte bewerten (z.b. Länderlisten) AJAX verwenden, um kompletten Seiten-Reload zu vermeiden Statischen Content über Webserver ausliefern 29
Web Tier Performance Servlets und JSPs HTTP Session Größe und Zugriff Session ist kein Cache Datenmenge stark begrenzen ansonsten nur eingeschränkte Skalierbarkeit Bei Session Replikation ist der Zugriff und die Größe der Session elementar für die Performance Session Timeout richtig setzen und explizit invalidieren JSP Tuning Elemente cachen (z.b. OSCache) Percompiling verwenden Kapselung von Funktionen in Custom Tags für zentrales Tuning der Anwendung Content Management System verwenden gute Caching und statische Export Funktionen vorhanden 30
3. JAVA EE PERFORMANCE BEST PRACTICES 31
Best Practices Architektur und Design Performance/Memory als Architektur- und Designtreiber Hohe Priorität, langsame oder instabile Anwendungen habe keine Akzeptanz Fokus auf diese Treiber in einer frühen Phase Definition von messbaren Zielen wichtig Die Applikation sollte korrekt funktionieren, bevor sie getuned wird Bugfixing/Weiterentwicklung und Tuning stören sich gegenseitig Konzentration auf Tuning, nicht auf Bugfixing Inkrementelle Vorgehensweise in kurzen Intervallen mit ständigem Tunen trotzdem möglich Sauberes Design und intensive Verwendung von Schnittstellen vereinfacht das Tuning Kapselung Methoden/Algorithmen/Zugriffe hinter definierten Schnittstellen Macht die Implementierungen austauschbar, wenn diese Probleme verursachen 32
Best Practices Performance Engineering Performance während des gesamten Lebenszyklus einer Software betrachten (Continuous Performance Management) Entwicklung Use Cases und Szenarien wählen (Performance Risiko) Performance Modelle erstellen (Software und System Execution Models) Modelle Evaluieren und Testen (Lasttest und Diagnose) Tuning Produktion Monitoring Capacity Planning 33
Best Practices Tools Schuss ins Dunkle vermeiden JVM Performance Tools verwenden GC Analyse Heap Dumps JMX Daten (jconsole) Thread Analyse Kommerzielle Lösungen Profiler (JProbe, PerformaSure, JProfiler, YouKit, dynatrace Diagnostics) Monitoring (Foglight, dynatrace Diagnostics, Introscope, ITCAM, i³) Open Source Profiler (Eclipse Profiler, JAMon, Netbean Profiler) Monitoring (Hyperic, Nagios) 34
Best Practices In Wissen investieren Profiler und Diagnose Werkzeuge werden häufig nicht genutzt Prozesse sind nicht bekannt oder häufig zu theoretisch Tiefgreifendes Verständnis der Technologien fehlt JVM Java SE & EE Frameworks Software Komponten Investieren Sie in Training und Workshops 35
Kontakt codecentric GmbH Mirko Novakovic Grünewalder Str. 29-31 42657 Solingen phone +49-212-2494315 mobil +49-163-6681500 email novakovic@codecentric.de