JSF webapplicatie performance



Vergelijkbare documenten
INFITT01 - Internettechnologie WEEK 8

INFITT01 Internettechnologie WEEK 2

Kleine cursus PHP5. Auteur: Raymond Moesker

Gebruik van cryptografie voor veilige jquery/rest webapplicaties. Frans van Buul Inter Access

Organiseer uw verschillende SOAP services in één scenario

Object Oriented Programming

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

Angular Best Practices Door Alex en Chris van Beek

Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.

Dynamische webapplicaties in Java

Unit testen van EJB's. Koert Zeilstra - iprofs

DOMjudge teamhandleiding

Zelftest Programmeren in Java

Weblogic 10.3 vs IAS

Zelftest Java concepten

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

4 ASP.NET MVC. 4.1 Controllers

Parasoft toepassingen

The OSI Reference Model

Programmeren in Java 3

Acht stappen voor JSF

Dit document beschrijft belangrijke aandachtspunten voor de installatie van Deep Defender. Ook omschrijft dit document hoe de beheerder kan omgaan

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet.

Copyright IBS Nieuwbouw. Vereenvoudigd en versnelt Java ontwikkeling. Huub Cleutjens

Scala. Korte introductie. Sylvia Stuurman

Sparse columns in SQL server 2008

IAAS - QUICK START GUIDE

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

Zelftest Java EE Architectuur

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Installatiehandleiding B3P GIS Suite v3.6

Applicatie-Architecturen

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

Correspondentie inzake overnemen of reproductie kunt u richten aan:

TECHNICAL DESIGN DOCUMENT

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

HANDLEIDING DMS Plugin Installatie, configuratie & werking

Databanken en webtoepassingen in Java

Web Application Security Hacking Your Way In! Peter Schuler & Julien Rentrop

ASRemote WebService. Via deze webservice kunt u:

NHibernate als ORM oplossing

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

ArcGIS Mobile ADF. Smart Client Applicaties voor ArcGIS Server Eva Dienske, Wim Ligtendag

Network Computing Architecture Toekomstige rol van Oracle Developer marginaal

Praktijk opdrachten VMware

What is the advantage of using expression language instead of JSP scriptlets and JSP expressions?

Applicatie-Architecturen

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

DRIVEN BY AMBITION SUCCESVOL EXACT IMPLEMENTEREN IN DE PRIVATE CLOUD

emaxx Systeem eisen ManagementPortaal voor de ZakenMagazijn database

F r a m e w o r k s. LinkWorks

XML Web Services of.net Remoting? W ANNEER GEBRUIK JE WELKE TECHNOLOGIE VOOR DE AANROEP VAN REMOTE SERVICES

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 11 maart Versie 1.1.0

Enterprise. RESTful Webservices. serieus alternatief voor SOAP?

Programmeren in Java les 3

Three Ships CDS opschalingsdocument Overzicht server configuratie voor Three Ships CDS

Kennissessie INSPIRE. Algemene vereisten & architectuur Metadata View Services Download Services Ondersteuning vanuit Geonovum.

Session Beans.

Versturen van vanuit een Delphi VCL toepassing

IMP Uitwerking week 13

Orbis Software. Portal4U. Installatie Handleiding. Dit document bevat de Installatie Handleiding voor Portal4U

Technisch Ontwerp W e b s i t e W O S I

Stappenplannen MailPlus SOAP API

Hier volgt als hulp wat technische informatie voor de websitebouwer over de werking van de xml web service.

INSTALLATIE EXCHANGE CONNECTOR

MEMO. De database server zit op piekmomenten aan een heel hoog CPU gebruik:

RAM optimaliseren: Cacheman

MADASTER PLATFORM. IFC export in BIM software. Archicad 21 & Revit 2019

Handleiding: Whitelabel Customersite

Inleiding C++ Coding Conventions

Nog even snel kleine issues oplossen

Modelleren en Programmeren

Installatie Accowin (versie 2)

Design patterns Startbijeenkomst

HDN DARTS WEB AUTHENTICATIE

Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 9

Oracle Application Server Portal Oracle Gebruikersgroep Holland Oktober 2003

Implementatie AssurePay ASP.NET. ideal

Tutorial 1, Delphi: Geldspraak

PayCheckout Magento module

Client Server 2.0 met jquery en Grails

Modelleren en Programmeren

Methodology. Client Server 2.0 met jquery en Grails. De eerste generatie Client-Server applicaties

Is APEX a worthy substitute for Oracle Forms?

Upgrade Accowin van versie 1 naar versie 2

Les 11: systeemarchitectuur virtuele machines

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma

Self-service functionaliteit

Practicum Software & Web Security 2. Instructies voor installatie en gebuik van WebGoat en WebScarab

De macro onthoudt na gebruik de laatste instelling en controleert alle stappen.

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Documentatie Distributed Services Enterprise Service Bus

React en React Native voor websites en apps

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren

Transcriptie:

JSF webapplicatie performance Kees Broenink (JSF expert), 27 januari 2009 JSF webapplicatie performance... 1 Applicatieserver in productie... 2 HotSpot... 2 Geheugen... 2 Webapplicatie performance analyse... 2 JSF fases... 3 JSF Backing Beans... 3 EJB services... 3 Database... 3 Achtergrondinformatie... 3 Algemene opmerkingen... 5 Vervolgstappen... 5

Applicatieserver in productie HotSpot Java Standaard Editie 5.0 heeft twee implementaties van de HotSpot Java Virtual Machine (JVM) technologie: -client: geoptimaliseerd voor snelle start-up en beperkt geheugengebruik, geschikt voor ontwikkeling -server: geoptimaliseerd voor maximale performance; geschikt voor productie HotSpot technologie in server-mode kan intensief gebruikte Java methodes naar machine-taal compileren (JIT, just in time) en opslaan in een cache. Dit is zeer geschikt voor server-applicaties die door meerdere gebruikers aangeroepen worden. Het maakt de performance van Java in principe net zo snel als een programma dat direct is gecompileerd naar machinetaal (C, assembler en dergelijke). Als je Glassfish gebruikt kun je deze instellingen vastleggen met de Admin Console (http://host:4848) in sectie Application Server > JVM Settings > JVM Options. Geheugen Een applicatieserver moet vele gebruikers tegelijkertijd kunnen bedienen en kan daarom behoorlijk belast gaan worden. Het is daarom aan te bevelen om een aparte machine in te richten voor de applicatieserver. Het beschikbare geheugen van de machine moet dan zoveel mogelijk toegekend worden aan de applicatieserver. Een Windows machine kan over het algemeen maximaal 2G aan een proces toekennen. Als de machine precies 2G aan fysiek geheugen heeft dan kunnen we ongeveer 3/4 deel daarvan aan de applicatieserver geven: -Xmx1536m Als de machine meer aan boord heeft is het wellicht mogelijk om de hele 2G toe te kennen aan het Java proces dat de applicatieserver draait. -Xmx2048m Standaard begint een Java proces met minder geheugen en groeit naar gelang de vraag. Dat is niet handig. Beter is om bij het opstarten direct al het maximale geheugen toe te kennen. Maakt daarom het minimum gelijk aan het maximum: -Xms1536m of -Xms2048m Als je Glassfish gebruikt kun je deze instellingen vastleggen met de Admin Console (http://host:4848) in sectie Application Server > JVM Settings > JVM Options. Webapplicatie performance analyse

JSF fases In JSF doorloopt een POST request 6 fases. We willen achterhalen in welke fase we veel tijd kwijt zijn. We schrijven hiervoor een speciale Listener en die configureren we in de faces-config.xml. De Listener schrijft naar 'standard out' hoeveel milli-seconden elke fase in beslag nam. Fase 1 heeft een zekere overhead die niet te vermijden is, maar meer dan 200ms is verdacht. Er moet dan een expert naar kijken. Fase 2, 3 en 4 zijn over het algemeen heel snel. Als dat niet zo is dan moet er een expert naar kijken. Als de meeste tijd in fase 5 besteed wordt dan kunnen we de zelfgeschreven Java code verder analyseren door de 'action' methodes te meten. Zie hieronder. Fase 6 heeft twee taken: de nieuwe pagina samenstellen en de componenten 'state' wegschrijven. Het samenstellen van de pagina betekent het aanroepen van de getters in de zelfgeschreven Backing Beans. Als uitgesloten is (zie hieronder) dat de tijd daar besteed wordt, dan is er een probleem met het bewaren van de componenten 'state' en moet er een expert naar kijken. JSF Backing Beans We kunnen een goed beeld krijgen waar in JSF de tijd besteed wordt door log4j debug statements te zetten aan het begin en einde van de 'zware' methodes in JSF. Denk hierbij aan de methodes die data ophalen (de getters in de pagina) en de 'action' methodes die uitgevoerd worden als er op een knop wordt geklikt. EJB services We kunnen een goed beeld krijgen waar de tijd besteed wordt door log4j debug statements te zetten aan het begin en einde van de service methodes. Database We kunnen een goed beeld krijgen waar de tijd besteed wordt door log4j debug statements te zetten aan het begin en einde van de JPA methodes. Achtergrondinformatie De Listener public class LoggingPhaseListener implements PhaseListener{ private static final long serialversionuid = -65262288427112030L; private final Logger logger = Logger.getLogger(this.getClass()); private HashMap<Integer, Long> stamps = new HashMap<Integer, Long>(6); /** * @param evt de JSF fase indicator */ public void beforephase(phaseevent event) { logger.debug("start fase "+event.getphaseid()); stamps.put(event.getphaseid().getordinal(),system.currenttimemillis());

/** * @param evt de JSF fase indicator */ public void afterphase(phaseevent event) { long start = stamps.get(event.getphaseid().getordinal()); long duur = System.currentTimeMillis() - start; logger.debug("einde fase "+event.getphaseid()+", duur: "+duur+"ms"); /** * @return PhaseId.ANY_PHASE */ public PhaseId getphaseid() { return PhaseId.ANY_PHASE; Configuratie Listener <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/webfacesconfig_1_2.xsd" version="1.2"> <lifecycle> <phase-listener>xxx.loggingphaselistener</phase-listener> </lifecycle> </faces-config> Achtergrondinformatie JSF JSF fase 1: RESTORE VIEW Als het vorige request dezelfde URL had (POST naar dezelfde pagina) haal dan de bewaarde componenten 'state' uit de 'serialized state string' en re-creëer de componenten met deze state. JSF fase 2: APPLY REQUEST VALUES Zet de request parameter values in de bijbehorende componenten. JSF fase 3: PROCESS VALIDATIONS Converteer en valideer de request parameter values. JSF fase 4: UPDATE MODEL VALUES Copieer de geconverteerde waardes naar de Backing Beans (setters). JSF fase 5: INVOKE APPLICATION Roep de 'action' methodes aan. JSF fase 6: RENDER RESPONSE Maak de HTML aan voor de nieuwe pagina en 'serialize' de componenten 'state'.

Algemene opmerkingen De Sun/Oracle technologie-stack: - JSF voor de presentatielaag - Session EJB voor de serviceslaag inclusief transactie-management - JPA met domeinobjecten voor de persistency-laag JSF implementatie: Sun Reference Implementatie 1.2 HTML templating: facelets JPA implementatie: EclipseLink Ik zet hier nu tegenover wat de meest gangbare keuzes in de markt zijn: - JSF voor de presentatielaag - Spring voor de serviceslaag inclusief transactie-management - JPA met domeinobjecten voor de persistency-laag JSF implementatie: Sun Reference Implementatie 1.2 HTML templating: facelets JPA implementatie: Hibernate We zien dat de meeste keuzes van de Sun/Oracle stack overeenkomen met de de-facto standaarden. De verschillen zijn de volgende. EJB versus Spring Het is bekend dat EJB's extra complexiteit met zich meebrengen. Kijk alleen al naar de mogelijke tuning opties in de diverse manuals. Spring daarentegen gebruikt singleton POJO's. Deze zijn simpel want gewoon Plain Old Java Objects. Ze zijn ook herbruikbaar voor alle gebruikers omdat het threadsafe singletons zijn (application-scope) in tegenstelling tot session EJB's die voor elke gebruiker apart aangemaakt worden. En Spring ondersteunt declaratieve transactie-demarcatie in combinatie met de POJO. EclipseLink versus Hibernate Hibernate heeft een enorm trackrecord. Er zijn vele boeken en blogs te vinden waarmee je Hibernate in de vingers kunt krijgen. Het is een framework dat al heel lang bestaat en waarin een hoge kwaliteit is bereikt. Vervolgstappen Behalve het plaatsen van log4j statements in de verdachte methodes kunnen we ook gebruik maken van speciale tooling om een compleet beeld te krijgen van CPU en geheugengebruik van alle aangeroepen Java methodes. Als een methode veel geheugen of CPU gebruikt dan kunnen we kritisch naar die code kijken en zien of dat volgens verwachting is of exceptioneel. Een goede tool is JProfiler. Deze tool is niet gratis maar kan wel gratis gedownload en gebruikt worden gedurende een bepaalde proeftijd. Als er veel tijd besteed wordt in JSF fase 1, 2, 3 of 4 dan is het verstandig om een JSF expert in te schakelen. Idem dito voor fase 6 als uitgesloten is dat de eigen 'getters' verantwoordelijk zijn voor de performance problemen. Als de EJB's traag zijn moet daarvan eerst de oorzaak gevonden worden en eventueel overgestapt worden op Spring.

Als de database de bottleneck is in bepaalde scenario's dan moeten de queries geanalyseerd worden en geoptimaliseerd. Dit kan door het aanleggen van indexen, gebruik maken van views of door een readonly query-cache te gebruiken. De cache kan door de database zelf verzorgd worden of in de Java code. In het laatste geval is EHcache (Easy Hibernate cache) een gangbaar framework.