Nieuwe Relic & JMeter - Perfect Performance Testing

In navolging van de geweldige inleidende artikelen die onlangs op Nettuts + zijn verschenen, lijkt dit artikel te laten zien hoe u New Relic naar een hoger niveau kunt tillen. Als hulpmiddel voor het monitoren van prestaties is New Relic fantastisch, maar hoe zit het met de prestaties? testing, voordat je live gaat. Dat is waar JMeter binnenkomt om te spelen. In deze tutorial zult u zien hoe we onze toepassing onder realistische belasting kunnen testen en de uitvoer van JMeter en New Relic kunnen combineren om u vertrouwen te geven in de prestaties van uw toepassingen, voordat u in een productieomgeving komt.

Gesponsorde inhoud

Deze inhoud is gemaakt in opdracht van NewRelic en is geschreven en / of bewerkt door het Tuts + -team. Ons doel met gesponsorde inhoud is het publiceren van relevante en objectieve zelfstudies, casestudy's en inspirerende interviews die echte educatieve waarde bieden aan onze lezers en ons in staat stellen om het creëren van bruikbare inhoud te financieren..

Waarom wachten tot de implementatie om te zien hoe uw applicatie het gaat doen tegen het echte verkeer? Als er een knelpunt in uw code is dat de gebruikerservaring degradeert, wilt u dan echt dat dit live gaat? Wat als we deze knelpunten vroegtijdig zouden kunnen vinden, de prestaties zouden verbeteren en de eerste keer een geweldige applicatie voor onze eindgebruikers zouden opleveren?, en bewaar dat in de toekomst met regelmatige benchmarking. JMeter en New Relic samen kunnen je deze perfecte set voor prestatietests geven.


Demo-applicatie

Voordat we New Relic en JMeter kunnen gaan gebruiken, hebben we een eenvoudige app nodig om enkele prestatietests uit te voeren! Dus laten we een eenvoudige Ruby Sinatra-app schrijven die een service heeft die we kunnen testen. Ik zal niet te veel ingaan op de creatie van deze applicatie, zoals je op Sinatra kunt lezen in andere artikelen over Nettuts+.

De toepassing wordt een beetje nagebootst, zodat we een aantal interessante resultaten kunnen zien in de trant van wat we in verschillende toepassingen kunnen zien. We zullen een service schrijven die een id in beslag neemt, en afhankelijk van die ID zal deze meteen of met een vertraging een waarde teruggeven. Dit laat ons zien wat er kan gebeuren als verzoeken snel of langzaam worden afgehandeld en de impact hiervan op de algehele prestaties van uw apps, aangezien veel gebruikers verzoeken doen.

Hier is de code die de services definieert:

 vereisen 'sinatra' vereisen 'puma' vereisen 'newrelic_rpm' module Voorbeeld klasse App < Sinatra::Base get '/example/:id' do |id| result = id if id == '1' result = "This is our id: #id" end if id == '2' sleep 3 result = "We waited for id: #id" end result end end end

Zoals je kunt zien is dit duidelijk een gekunsteld voorbeeld, maar het idee is dat we een aantal snel reagerende diensten hebben en een met een kleine vertraging. We kunnen nu deze app gebruiken en beginnen met het schrijven van ons prestatietestplan in JMeter. Laten we eerst JMeter op onze machine installeren.


Aansluiten bij een nieuw relikwie

Het is heel eenvoudig om uw applicatie te laten rapporteren bij New Relic. Nieuwe Relic-ondersteuning voor Ruby, Python, PHP, Java en andere platforms, met gemakkelijk te volgen handleidingen voor iedereen. In het geval van Ruby an Sinatra is het letterlijk een proces in vier stappen:

  • Voeg de 'newrelic_rpm' edelsteen toe aan uw GemFile en 'bundel-installatie'.
  • In uw hoofd 'app.rb' waar we de bovenstaande serviceroute hebben gedefinieerd, voegt u een "require 'newrelic_rpm'" regel toe.
  • Download het bestand 'newrelic.ini' uit uw account in New Relic en plaats het in een configuratiemap in uw app.
    (Zorg dat de bewakingsmodus is ingesteld op 'true' voor ontwikkeling als deze lokaal wordt uitgevoerd.)
  • Rackup uw applicatie en bekijk deze vermeld in New Relic!

Zodra u deze eenvoudige stappen hebt gevolgd, moet u beginnen met het zien van bepaalde gegevens die doorgaan naar New Relic terwijl u met enige hoeveelheid verkeer uw app raakt. U weet dat het werkt wanneer de app wordt vermeld en groen wordt.


Voor de volledigheid zal ik slechts een kort overzicht geven van de hoofdvisie die New Relic biedt voor uw toepassingen. Het ontwerp op New Relic is voornamelijk bedoeld om applicaties te volgen die zich in productieomgevingen met live verkeer bevinden. Het overzichtsscherm geeft in een oogopslag de huidige status van uw toepassing weer en hoe deze reageert op verzoeken van klanten.

Het scherm kan als volgt worden uitgesplitst:

  1. Reactietijd - dit is de gemiddelde responstijd van oproepen binnen uw applicatie.
  2. Apdex - Nieuwe Relics-metriek voor klantervaring. Een score meer naar 1 geeft de overgrote meerderheid van de gebruikers aan
    verzoeken vallen binnen een redelijke termijn. De apdex kan handig zijn om te waarschuwen wanneer deze onder het ingestelde aantal komt.
  3. Doorvoer - de verzoeken per minuut (RPM) die in uw toepassing worden gemaakt.
  4. Webtransacties - de verschillende routes die worden geopend in uw toepassing. Deze worden besteld door de meest tijdrovende aanvragen.
  5. Foutenpercentage - het percentage verzoeken dat een fout veroorzaakt. U kunt hier doorklikken en individuele fouten opsporen.


Wat is JMeter?


JMeter is een Java-applicatie waarmee u testplannen kunt opstellen die de stress van uw toepassing kunnen testen. U kunt alles instellen, van het aantal gelijktijdige gebruikers van de service, tot het aantal verzoeken dat ze een seconde maken. U kunt zelfs de verzoeken verhogen om te zien hoe uw app omgaat met het wijzigen van de belasting, net zoals bij de echte implementatie.

Als onderdeel van deze zelfstudie laat ik de basis zien van het uitvoeren van een testplan tegen uw toepassingen, maar met een schat aan plug-ins en documentatie zijn er tal van hulpmiddelen voor elke vorm van prestatietests die u mogelijk nodig hebt.


Installatie en gebruik

De installatie is redelijk eenvoudig en hier zullen we instructies voor Mac en Linux weergeven.

Mac OS X

Op een Mac JMeter kan heel eenvoudig via Brew worden geïnstalleerd. Als je eenmaal hebt gebrouwen, probeer dan
volgende opdracht:

 zet jmeter neer

Linux

Op een Linux-machine kunt u eenvoudig downloaden van de JMeter-downloadpagina. Volg dan gewoon de gegeven instructies.

Alle platforms

Zodra u het belangrijkste JMeter-pakket hebt, moeten we ook de standaardset plug-ins installeren. We zullen later in het bijzonder gebruik maken van één plug-in, daarom moeten we deze toevoegen om hem te kunnen gebruiken. De standaard plug-inset kan worden verkregen via deze link: http://jmeter-plugins.org/downloads/file/JMeterPlugins-1.0.0.zip Eenmaal gedownload extract in het JMeter-pakket dat zich bevindt op: "/ usr / local / Cellar / jmeter / "op een Mac en waar je het ook op Linux hebt geïnstalleerd.


Analyse in nieuw relikwie - Eerst hebben we een JMeter-testplan nodig!

Dus nu hebben we JMeter geïnstalleerd en onze eenvoudige applicatie, laten we deze app testen en zien hoe deze zich gedraagt. Wanneer u JMeter opstart, krijgt u dit scherm:

Laten we nu de basis-URL voor onze verzoeken instellen. Klik met de rechtermuisknop "Testplan" in het linkerdeelvenster en kies 'Add -> Config Element -> HTTP Request Default'. We kunnen nu onze basis-URL invoeren zoals hier.


We kunnen nu het aantal threads of "gebruikers" van ons systeem toevoegen. Klik hiertoe met de rechtermuisknop "Testplan" opnieuw en kies 'Add -> Threads (Users) -> Thread Group'. We kunnen dan de gebruikers invoeren, in dit geval 20. Zorg ervoor dat u de lus-telling voor altijd optie kiest, omdat dit ons in staat stelt om de tijd en het aantal verzoeken via een plug-in later te beheren.


Zodra we de threadgroep hebben, kunnen we nu de verzoeken definiëren die we aan onze applicatie willen doen, zodat we de prestatietest kunnen uitvoeren. Om dit te doen zullen we "HTTP Request" toevoegen aan ons "Testplan". Dit kan gevonden worden door rechts te klikken op de "Thread Group" en kiezen "Toevoegen -> Sampler -> HTTP-aanvraag". Vervolgens kunnen we het verzoek definiëren om in het paneel te maken, zoals hieronder.


U kunt zien hoe we de basis-URL niet hoeven te definiëren, zoals we eerder hebben gedaan en in plaats daarvan gewoon het pad voor het verzoek moeten toevoegen. In dit geval is het pad naar ons 'voorbeeld / 1'-antwoord. U zult ook opmerken dat ik doorging en de andere twee verzoeken samen met de resultaat- en grafische panelen heeft toegevoegd, die we zullen gebruiken om de resultaten van de tests te analyseren. Ondertussen zou je de elementen moeten kunnen toevoegen en ze kunnen gemakkelijk in het menu worden gevonden aan de hand van hun namen. De twee belangrijkste interesses zijn de "Throughput Shaping Timer" en de "Composite Graph".

Met de Shaping Timer kunnen we in kaart brengen hoe we de aanvragen in de loop van de tijd naar onze applicatie willen laten maken. We kunnen bijvoorbeeld één verzoek per seconde gedurende 60 seconden configureren en vervolgens 60 seconden lang oplopen tot vijf verzoeken per seconde en zien welk effect dit heeft op onze reactietijden. Laten we eens kijken hoe we dat configureren in het deelvenster Shaping Timer.


Dus door in te gaan en elke rij toe te voegen, kunt u de hoeveelheid verzoek definiëren en hoe lang dit moet duren. We kunnen dan onze resultaten bekijken met behulp van de "Composite Graph", die de transacties per seconde weergeeft in vergelijking met de reactietijd van onze verzoeken. Dit vereist een minimale configuratie, door gewoon de twee grafieken toe te voegen die we zullen combineren, voeg dan in de instellingen voor de samengestelde grafiek de grafieken toe die we nodig hebben, zoals:


Dat is het! We kunnen nu ons testplan uitvoeren en enkele resultaten zien. Druk op play naar de bovenkant van het scherm en klik vervolgens op de samengestelde grafiek. Het zal de resultaten beginnen te verspreiden zodra ze binnenkomen en u kunt een beeld krijgen van hoe uw applicatie reageert. Laten we naar onze resultaten kijken.


We kunnen duidelijk zien dat de stijging van het aantal verzoeken per minuut een redelijk grote impact heeft op onze applicatie. Voor de eerste minuut zijn de verzoeken stabiel op één per seconde en geven ze responstijden van ongeveer twee / drie ms. Wanneer we echter toenemen tot vijf, nemen de reactietijden licht toe met een snelheid van vijf en vijf m / s. Uiteraard zijn dit zeer snelle responstijden in de echte wereld, maar we laten hier alleen zien hoe we de belasting kunnen verhogen en zien welk effect, indien aanwezig, dit zal hebben.

Laten we deze resultaten vergelijken met de service met een vertraging van drie seconden. Hoe gaat dat met de toename van de belasting? Om over te schakelen naar voorbeeld twee, klik rechts op voorbeeld één en kies schakelen. Hierdoor wordt dat verzoek uitgeschakeld en vervolgens in voorbeeld twee geschakeld en dat zal het inschakelen. Klik op de "Wis alles" (Vegen borstel) pictogram bovenaan om de resultaten van de laatste run te wissen en druk op play.


Zelfs met de vertraging van drie seconden, heeft de server de aanvragen redelijk goed beheerd en we zien vrijwel hetzelfde in de manier van resultaten voor deze service. Slechts enkele milliseconden nemen toe naarmate de aanvragen toenemen. Met zo'n eenvoudige service is dit te verwachten.


Nieuwe Relic Analytics

De echte kracht komt nu met het combineren van deze gegevens met New Relic. We kunnen bijvoorbeeld JMeter instellen voor een half uur met verschillende variaties van belasting en vervolgens New Relic gebruiken om de resultaten te analyseren en de drilldown-functionaliteit te gebruiken om knelpunten in de toepassing op te sporen. Deze kunnen vervolgens worden verfijnd, waardoor uw prestaties verbeteren voordat ze aan uw klanten worden geleverd.

Nogmaals, ik zal niet ingaan op de setup van New Relic, omdat dit wordt behandeld in andere recente artikelen over Nettuts + (zie hier). Maar zodra uw toepassing is verbonden, is het gewoon een kwestie van het genereren van de belasting via JMeter en het inloggen op New Relic om de resultaten te zien. Voor deze run heb ik de Shaping Timer ingesteld om onze belasting gedurende 30 minuten uit te voeren, waarbij de aanvragen van vijf naar 10 en vervolgens van 15 per seconde worden opgevoerd. Dit zou ons redelijk verkeer moeten geven om naar te kijken in New Relic.


Nadat de JMeter-test is uitgevoerd, kunnen we New Relic bekijken, die we nu kunnen zien met stat op het volgende verkeer via de app.


Dit toont duidelijk de toename van de verzoeken, met een piek van ongeveer 400 verzoek per minuut (RPM) en de reactietijden blijven stabiel op drie seconden. We kunnen dieper ingaan op de statistieken en kijken naar de transactie die we maken. Als we doorklikken naar de weergave Webtransacties, zien we de analyse die New Relic heeft uitgevoerd op alleen dit deel van de toepassing. Als de code waarmee het verzoek was afgehandeld meerdere lagen had, zoals methoden om andere systemen te bellen om gegevens te ontvangen voordat ze aan de gebruiker konden worden gepresenteerd, zouden we meer van een uitsplitsing te zien krijgen.

Links ziet u bijvoorbeeld dat we in die aanroep 100% van de aanvraagtijd hebben doorgebracht. Als we meerdere fasen hadden, zoals een oproep naar een database, kunnen we daar een hoog percentage zien en we zouden het weten om de query naar de database te optimaliseren om de prestaties te verbeteren.


New Relic biedt ook een geweldige rapportageweergave over uw toepassingsgegevens, genaamd schaalbaarheid. Dit rapport kan erg handig zijn om te controleren of uw toepassingen in staat zijn om toenemende belasting te verwerken. De grafiek toont uw responstijd ten opzichte van de verzoeken per minuut en u kunt duidelijk zien of er een verslechtering is in de responstijd naarmate deze toenemen. Dit is een geweldig hulpmiddel en een hulpmiddel waarnaar u vaak moet verwijzen, zowel bij prestatietests als bij deze, maar ook bij uw prestatiebewaking van uw productieapplicatie.

In ons onderstaande voorbeeld is het duidelijk dat de applicatie in staat is om een ​​reactietijd van drie seconden te behouden, zelfs als de RPM toeneemt.


New Relic biedt ook een andere kijk, die van capaciteit. Op deze manier kunnen we bekijken hoeveel van de beschikbare bronnen onze applicatie gebruikt. Het geeft aan de ontwikkelaar aan of het aantal instanties dat uw aanvraag dient, voldoende is om het soort lading te verwerken dat u krijgt. Dit is van vitaal belang om ervoor te zorgen dat u niet in de buurt van de capaciteit rent en in staat bent om pieken in het verkeer op te vangen die zich buiten uw normale verkeersstroom kunnen voordoen. New Relic vatten de pagina goed samen, naast de analyse van onze applicatie hier, die we kunnen zien is goed stroomlijnen, zelfs op deze enkele instantie.



Conclusie

Het doel van deze zelfstudie was om u te laten zien hoe u snel JMeter-testplannen voor uw toepassing kunt instellen, zodat u de prestaties van uw toepassing kunt testen voordat deze aan uw klanten wordt afgeleverd. Deze aanpak kan worden gebruikt in nieuwe projecten, zodat de applicatie die u gaat leveren klaar is voor het echte verkeer. Het kan ook worden gebruikt in oudere toepassingen, waardoor u een basisprestatie-indicator krijgt, zodat u tijdens het maken van toekomstige wijzigingen kunt zien of de prestaties van uw toepassing verbeteren of afnemen.

Door gebruik te maken van de geweldige tools van New Relic kunt u zowel uw applicatie online in realtime volgen, maar ook de toolset gebruiken en deze toepassen op uw eigen offline analyse. Dit geeft u, de ontwikkelaar, vertrouwen in uw product, zowel tijdens de ontwikkeling ervan als wanneer het in het wild wordt vrijgegeven.