Terug

Monitoring Application Performance

Auteur: Kelvin en Remco

Als je ooit een applicatie in productie hebt gezet, dan heb je waarschijnlijk te maken gehad met performance problemen. In je lokale ontwikkelomgeving werkt een applicatie vaak sneller dan in een productieomgeving, waardoor het opsporen van de oorzaak van deze performance problemen vaak erg moeilijk is. De oplossing hiervoor is performance monitoring en het werken met Application Performance Monitoring (APM) tools. In dit artikel leggen wij uit wat performance monitoring inhoudt, waarom het belangrijk is en hoe het werkt.

Wat is performance monitoring?

Performance monitoring is het monitoren en controleren van de prestaties, oftewel  performance, van je applicatie. Er zijn veel verschillende Application Performance Monitoring tools om dit te kunnen doen. Het grote voordeel hiervan is dat je hierdoor inzicht krijgt in je applicatie en kunt vinden wat de slechts presterende onderdelen van je applicatie zijn.

Wij maken gebruik van 2 soorten performance monitoring:

Front-end monitoring: Dit is het monitoren van gebruikerservaringen, met name de errors die gebruikers tegenkomen. Wanneer een gebruiker een error tegenkomt, wordt dit vastgelegd met alle variabelen. Hierdoor wordt het proces van het opsporen van fouten in je code versneld en kun je errors gemakkelijk reproduceren.

Back-end monitoring: Dit is het monitoren van alle requests in de back-end. Hier zie je de responstijden en het resourceverbruik van alle requests, waardoor het opsporen van slecht presterende functies binnen je applicatie vergemakkelijkt wordt. 

Hoe houden we de responstijden in de gaten?

De responstijd is de hoeveelheid tijd vanaf het moment dat een gebruiker een request stuurt tot wanneer de respons verstuurd is naar de gebruiker. Deze tijd willen wij zo laag mogelijk houden, zodat de gebruikers een soepele ervaring hebben en niet lang hoeven te wachten wanneer zij bijvoorbeeld naar de homepagina gaan. Om deze responstijden in de gaten te houden, gebruiken wij Scout APM.

De responstijd waar wij het meest op letten is de “Response Time - 95th”. De 95th percentile response time geeft aan dat 95% van alle requests binnen de aangegeven tijd afgehandeld zijn. Hoe dichter dit getal bij 100% ligt, hoe beter je kan stellen dat de applicatie snel laad voor bijna alle gebruikers.

In de afbeelding hieronder zie je een performance overzicht van 7 dagen, met daarin de gemiddelde responstijd, 95th percentile en throughput (hoeveelheid requests per minuut). De trage queries worden onderin de tool aangegeven.

Hoe monitoren we het gebruik van resources?

Resources zijn werkgeheugen en rekenkracht van een processor. Onze applicaties draaien op servers die een beperkte hoeveelheid van deze resources hebben. Wanneer we meer resources gebruiken dan we hebben toegewezen, stuiten we op beperkingen en merken gebruikers dat de applicatie langzamer werkt.

Neem bijvoorbeeld Heroku. Daar hosten we meerdere van onze applicaties. Bij Heroku kunnen we tot op de minuut nauwkeurig zien hoeveel werkgeheugen en rekenkracht er gebruikt is. Dit kan er als volgt uitzien:

Het komt voor dat bepaalde onderdelen van een applicatie een enorm verhoogd geheugengebruik veroorzaken. Met Scout APM kunnen we deze oorzaken inzichtelijk maken. In de onderstaande afbeelding zie je een overzicht van onze applicatie, waarbij Scout aangeeft waar en hoeveel het werkgeheugen is gestegen.

Performance problemen omvormen naar tickets

Elke maand evalueren we de performance van onze applicaties aan de hand van een performance plan. Het resultaat van dit plan is dat we tickets schrijven, die vervolgens via ons SCRUM-proces in de komende sprints worden opgepakt. Voorafgaand aan dit plan stellen we doelen voor de gewenste performance van de applicatie. Deze doelen evalueren we eerst en scherpen we eventueel aan. Vervolgens kijken we onder andere naar de bovengenoemde responstijden en verhoogd werkgeheugengebruik. Per categorie schrijven we een ticket voor het meest opvallende probleem.

Iedere applicatie kan een beperkt aantal aanvragen tegelijk verwerken. Als enkele van deze aanvragen erg lang duren, kan het zijn dat andere aanvragen langer moeten wachten op een antwoord van de applicatie. Dit noemen we queueing. Wanneer we de performance van een veelgebruikt onderdeel van de applicatie verbeteren, zullen gebruikers dit ook merken op andere plekken van de applicatie. Dit komt doordat de applicatie dan minder tijd nodig heeft om aanvragen met betrekking tot het veelgebruikte onderdeel te verwerken.

Nadat we deze tickets hebben opgepakt, zijn we een maand verder. Op dat moment evalueren we opnieuw de performance van de applicaties met ons performance plan en zullen er nieuwe opvallende delen van de applicatie aan het licht komen. Hiervoor schrijven we vervolgens nieuwe tickets en herhaalt het proces zich.

Performance testen

Performance testen is een type softwaretesten dat gericht is op het evalueren van hoe een applicatie presteert onder bepaalde belasting. Het doel van performance testen is om te bepalen of de applicatie voldoet aan vooraf bepaalde prestatiespecificaties. Daarnaast kan het eventuele knelpunten of prestatieproblemen identificeren voordat er aanpassingen worden doorgevoerd naar een productie applicatie. Op dit moment onderzoeken we oplossingen om periodiek de performance van onze applicaties te testen. Het resultaat hiervan zullen we op een later moment met jullie delen (wordt vervolgd 😏).