Insights, technology, people and more

Altijd up-to-date met onze laatste artikelen.

@
Verbeter de performance van uw applicatie

Verbeter de performance van uw applicatie

8 October 2010 door in Hosting Optimalisatie

Iedere ontwikkelaar of provider wordt bij tijd en wijle geconfronteerd met een slechte performance van diensten en applicaties. Soms wordt het probleem veroorzaakt doordat de resources niet voldoende blijken voor de zwaarte van de applicatie, maar vaker nog moet de oorzaak gezocht worden in de software zelf of de configuratie van de server. Zeker als de bewuste applicatie recent verhuisd is naar een andere serveromgeving, is het zoeken naar de oorzaak van de problemen een urgente, maar mogelijk tijdrovende klus. Tijdens een migratieproces komen de problemen vaak niet naar voren namelijk, omdat de belasting van de applicatie dan vele malen lager is dan in de uiteindelijke live-situatie.

Maar wat is een efficiënte manier om achter de oorzaak te komen? Waar begin je? En hoe verhelp je het vervolgens? Een snelle blik op de servers naar het geheugengebruik, de CPU belasting en I/O gebruik kan een aanwijzing zijn en een richting geven om in te zoeken, maar vertelt meestal niet direct waar het probleem echt door wordt veroorzaakt. Dieper onderzoeken is noodzakelijk. We zullen hieronder een voorbeeld geven van een mogelijke aanpak, gebaseerd op een PHP applicatie met MySQL database op een Linux platform met een Apache webserver.

Optimalisatie webserver en front-end

In een shared hosting omgeving is het over het algemeen niet gewenst om per gebruiker aparte instellingen te definiëren, maar in een dedicated omgeving geldt dit zeer zeker niet. Belangrijk is te kijken naar de specificaties van de webserver en het vertoonde gedrag van de applicatie. Controleer of de serveromgeving aansluit bij de wensen en de performance van de applicatie.

Clients en processen

Controleer het aantal beschikbare clients van de webserver (MaxClients) en het aantal dat wordt gebruikt (via apache-status). Zijn deze permanent in gebruik? Dan kan het wenselijk zijn dit aantal te verhogen. Apache gebruikt hiervoor de configuratieopties MaxSpareServers en MaxClients.

Vraag ook altijd een aantal keer een proceslist op van de webserver. Misschien draaien er wel vreemde processen die er niet thuishoren, voor performanceverlies zorgen en dus aandacht behoeven. Een controle op alle openstaande connecties naar de port van webserver (over het algemeen port 80) is geen overbodige luxe. Ziet u vreemde processen? Loop deze na en achterhaal waar ze door worden veroorzaakt.

Controleer via apache-status ook de individuele PHP processen die er draaien. Het kan zijn dat er permanent veel processen blijven hangen, en dus connecties bezet houden. Dit kan bijvoorbeeld veroorzaakt worden door lange of oneindige loops in de scripts. PHP processen die extreem veel geheugen of CPU tijd naar zich toetrekken zijn ook de moeite waard van het onderzoeken.

Caching en compressie
Als de bovenstaande mogelijkheden nou niet de bottleneck opleveren, zijn er op nog meer plaatsen winst te behalen. Wordt er bijvoorbeeld caching toegepast op serverniveau, en hoeveel cache is er beschikbaar? Er zijn verschillende caching toepassingen en modules beschikbaar, zoals APC of eAccelerator. Bekijk welke variant het best aansluit bij de werking van uw applicatie.

Wordt er PHP compressie gebruikt? Zeker bij grote pagina’s met veel tekst (en mogelijk javascript) kan dit voor de bezoeker de snelheid aanzienlijk verbeteren. Het kan ook juist een goed idee zijn om compressie uit te zetten. Als een server erg zwaar belast is, kan dit lucht geven en de snelheid positief beïnvloeden.

Het kan ook zo zijn dat de traagheid van een applicatie niet door de servers wordt veroorzaakt, maar door de gebruikersinterface. In het verleden hebben wij op ons blog al een aantal tips aangedragen die kunnen leiden tot een verbetering van de laadtijd. Bekijk hiervoor het artikel Verbeter de laadtijd van uw website.

Optimalisatie database en back-end

Niet alleen de webserver en front-end kunnen de oorzaak zijn van de traagheid van uw applicatie. De back-end en database kunnen ook zorgen voor performanceproblemen. Zowel de structuur van de database zelf als de queries die erop worden afgevuurd zijn de moeite waard om te bekijken.

Maar zonder nog te kijken naar die structuur en de queries, is vaak al goed te zien of het probleem door de database wordt veroorzaakt. Door een simpel commando op de shell van de webserver is te zien of er veel verzoeken van de webserver staan te wachten op afhandeling door de database:

netstat -tap | grep databasehostname | grep WAIT | wc –l

Als er veel connecties open staan met de status TIME_WAIT is dat een indicatie dat de databaseserver de webserver niet kan bijhouden en dus voor vertraging zorgt. Het kan zijn dat er gewoon erg veel queries tegelijk op de database worden afgevoerd, maar het kan ook zijn dat queries er erg lang over doen. Door een analyse te doen van de mysql-slow-query log, is het eenvoudig hier inzicht in te krijgen.

Queries en indexes
Als het vermoeden bestaat dat sommige queries er erg lang over doen om een resultaat te retourneren, is het raadzaam te kijken naar de MySQL query logs (of eventueel handmatig steekproven te doen). Als u toegang heeft tot het mysql-slow-log of het mtop programma, is het een goed idee om deze zorgvuldig na te lopen en te kijken naar uitschieters en veelvoorkomende queries met een lange doorlooptijd. Wellicht kunnen deze naar een veel efficiënter syntax herschreven worden. Als er functies aangeroepen worden binnen een databasequery, kan het raadzaam zijn om dit wellicht uit de query te halen en door de applicatie te laten verzorgen. De wijze waarop gebruikt wordt gemaakt van JOIN operaties is ook vaak een punt waarop enorme verbeteringen kunnen worden doorgevoerd.

Het optimaliseren van databasequeries is een vak apart. Het gebruik van een Query Optimizer kan u een goed houvast bieden en op weg helpen.

Het gebruik van indexes in een database kan vergeleken worden met een inhoudsopgave of register in een boek. Het maakt het mogelijk om snel bepaalde waardes te achterhalen zonder daarvoor de hele databasetabel te hoeven doorzoeken. Het gebruik van indexes op veel-doorzochte velden in grote databasetabellen kost weliswaar schijfruimte en geheugen, maar kan voor aanzienlijk snellere resultaten zorgen.

Meer informatie over database indexes kunt terugvinden op Wikipedia.

Buffers en connecties
Het aanpassen van het aantal toegestane connecties of het toevoegen van specifieke buffer instellingen kan ook voor een hogere performance zorgen. In MySQL’s configuratiebestand my.cnf kan het de moeite waard zijn om de volgende velden van een waarde te voorzien: key_buffer_size, sort_buffer_size, read_buffer_size, join_buffer_size. Het aanpassen van het aantal toegestane connecties en de table_cache instelling kan ook van grote invloed zijn op het geheugengebruik en dus de performance. Als bijvoorbeeld het aantal toegestane MySQL connecties erg verschilt van de MaxClients waarde van Apache, kan dat ook betekenen dat de webserver te veel vraagt van de databaseserver. Teveel cache kan ook vertragend werken als het geheugen daardoor vol loopt.

Goede tips kunt u terugvinden op het developers forum van MySQL.

Conclusie

De snelheid van een applicatie wordt door veel verschillende factoren bepaald. De uiteindelijke snelheid is altijd net zo groot als die van het traagste onderdeel. Het achterhalen welk onderdeel dit is, is een zoektocht die zich over veel verschillende gebieden uitstrekt en vereist zowel kennis van serverconfiguratie, applicatieontwikkeling, databasedesign als interfacedesign.

Belangrijk om mee te nemen in iedere aanpassing die gedaan wordt is het effect dat dit heeft op andere onderdelen van het geheel. Als een databaseserver moeite heeft met de verwerking van alle requests van de webserver, is het geen goed idee om de verwerkingssnelheid van de webserver te verhogen. Het resultaat is alleen een nog zwaarder belaste database.


Altijd up-to-date met onze laatste artikelen.

@

Kwaliteit. Betrouwbaar. Betrokken.
  • 24/7 service support
  • Nederlandse datacenters
  • ISO 27001 gecertificeerd
vmware enterprise service provider