Benchmarken en stress testen met Siege

Wanneer je een webapplicatie hebt zoals een website, landingspagina of webwinkel wil je graag dat deze ten alle tijden werkt. De webapplicatie zal een groot aantal gebruikers moeten kunnen hebben zonder dat deze uitvalt. In dit artikel leg ik je uit hoe jij je webapplicatie kunt benchmarken en stress testen met een tooltje genaamd Siege ( humoristische naam, overigens! ).

photo credit: Saf' via photopin cc

photo credit: Saf’ via photopin cc

Om een idee te krijgen wat je webapplicatie maximaal aan kan, zul je dit eerst moeten testen. Er zijn een aantal populaire tools beschikbaar zoals de Apache HTTP server benchmarking tools maar dit keer ga ik het hebben over Siege.

Waarom Siege

Siege is een benchmarking tool en een HTTP load tester, qua interface lijkt het een beetje op ab ( ApacheBench ). Dit is handig want dit maakt de overgang makkelijker voor diegene die al ervaring hebben met ab. In plaats van het testen tegen een enkele URL staat Siege het toe om te testen tegen meerdere URL’s tegelijk. Dit geeft je de mogelijkheid om een “real-world” simulatie te kunnen uitvoeren om er zo achter te komen hoe een gebruiker je webapplicatie gebruikt.

Installeren van Siege

Wanneer je OS X gebruikt kun je Siege installeren via homebrew of ports door het draaien van onderstaand commando:

of

Wanneer je gebruik maakt van een Linux distributie, dan kun je deze toevoegen met behulp van je package manager. Meestal is Siege te installeren met behulp van apt-get of yum install.

Draai eenmalig het onderstaande commando om een nieuw configuratie bestand aan te maken:

Benchmarken met behulp van Siege

Om URL’s te benchmarken in Siege zul je gebruik moeten maken van de -b optie. Deze zal je tests draaien zonder vertraging voor troughput benchmarking. Zonder de -b benchmark optie zal Siege een 1 seconde vertraging toeppassen tussen requests voor elke gesimuleerde gebruiker.

Je kunt deze benchmark voor altijd blijven draaien, maar het is handiger om een specifieke maximale periode in te stellen. Om de duratie van een test in te stallen maak je gebruik van de -t [NUMm) optie. Het NUMm formaat is een representatie van tijd, hieronder vind je een aantal voorbeelden:

  • -t60 ( 60 seconden )
  • -t240M ( 240 minuten )
  • -t3H ( 3 uur )

Om een demonstratie te geven van Siege heb ik deze laten draaien tegen een foodblog van mijzelf: ohmydish.com. Voer het onderstaande commando uit en vervang hierbij eerst de URL met die van jezelf:

De output van deze test is als volgt:

Afgaand van de resultaten kun je zien dat de server altijd beschikbaar was en een gemiddelde response tijd van 0.08 ms heeft. Het gemiddelde aantal requests per seconde was: 187.12.

Stress testen ( load testing )

Gecombineerd met een tool zoals New Relic geeft Siege’s load testing tool inzicht in de zwakke plekken van je webapplicatie. Wanneer je een load test aanmaakt, moet je gebruik maken van de -d en -c NUM optie. De -d NUM optie stelt een willekeurige interval in tussen 0 en NUM die elke gesimuleerde gebruiker zal laten slapen voor een x periode tussen elke request. De -c NUM optie zet het gelijktijdige aantal gesimuleerde gebruikers.

Hieronder vind je een voorbeeld van een stress test op ohmydish.com met behulp van dit commando:

 

Tijdens deze test zie je dat er 50 gelijktijdige gebruikers ( of connecties ) de server gebombardeerd hadde, iets wat geresulteerd heeft in een gemiddelde response tijd van 0.03 seconde. De langste transactie was 1.15 seconden, helemaal niet lang dus!

Meerdere URL’s

Om een wat preciezere simulatie uit te voeren die een gebruiker zou kunnen nemen kun je Siege een bestand met URLs geven met behulp van de -f optie. Dit bestand moet een URL op elke nieuwe regel bevatten. Iets anders dat ik kan aanraden is om de -i optie in te stellen zodat Siege willekeurige URL’s uit dit tekst bestand pakt om mee te testen, om zo een iets nauwkeurigere “real-world” test uit te voeren. Maak gebruik van onderstaand commando om Siege URL’s uit een bestand te laten lezen:

Meer informatie kun je vinden op de homepage van Siege: http://www.joedog.org/siege-home/

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *