13 Profileringsprogramvara för att felsöka applikationsprestandaproblem

Syftet med din ansökan är att tjäna dina slutanvändare väl.

Det måste vara snabbt, lyhört, lätt att använda och pålitligt, bland andra önskvärda funktioner.

Men att underhålla din programvara på ett sätt som fortsätter att leverera prestanda på högsta nivå är inte så lätt.

När din kod börjar anropa onödiga funktioner, snubblar över sig själv, fångar buggar och går in i extra loopar, kan det resultera i ineffektivitet. Din ansökan kan bli trög, svarar inte eller bete sig oregelbundet.

Och om du inte åtgärdar dessa problem, lider den övergripande applikationens prestanda.

Följaktligen kan dina kunder bli irriterade eller sluta använda din applikation helt och hållet på grund av dålig prestanda och låg hastighet. Det försämrar inte bara ditt rykte utan kostar dig också i form av intäkter och vinster. Därför måste din kod analyseras, granskas och felsökas för att uppnå optimal prestanda. Och det snabba sättet att göra det är att använda ett mjukvaruprofileringsverktyg för att övervaka och felsöka dina koder och eliminera prestandarelaterade flaskhalsar.

I den här artikeln får du lära dig om programvaruprofilering och hur det kan hjälpa dig. Sedan kommer jag att gå igenom några av de bästa profileringsverktygen för att felsöka din applikation och optimera dess prestanda.

Vad är mjukvaruprofilering?

Mjukvaruprofilering är en dynamisk kodanalys där ett programs beteende undersöks med hjälp av data som samlas in när programmet körs. Det syftar till att bestämma olika programsektioner som du måste optimera för att öka applikationshastigheten, känsligheten och minska dess minne och resursförbrukning.

En mjukvaruprofilerare mäter vanligtvis varaktigheten och frekvensen av funktionsanrop tillsammans med minne eller tidskomplexitet som är associerad med ett program. Det finns också specifika profiler tillgängliga, som minnesprofilerare.

Profilering utförs vanligtvis genom instrumentering av programmets källkod. Profiler kan använda olika tekniker för profilering såsom instrumenterade, händelsebaserade, statistiska eller simuleringsmetoder.

Varför spelar mjukvaruprofilering någon roll?

Mjukvaruprofilering behövs för att bestämma resursanvändning och exekveringstid för en specifik funktion. Det hjälper till att optimera programmets hastighet och samtidigt säkerställa att det förbrukar minimala resurser.

Dessutom görs det för att spåra och optimera CPU-användning och körningstid för kommandon.

Därför är det nödvändigt att välja rätt programvaruprofileringsverktyg för att säkerställa att du kan felsöka prestandarelaterade problem snabbare för att förbättra dess effektivitet och ge en bättre slutanvändarupplevelse. Många profilerare kommer också med detaljerade rapporter och interaktiva grafer och visualiseringar som hjälper dig att hitta den exakta grundorsaken till problemen, vilket gör det lättare att lösa dem.

Så här är en lista över några av de bästa programvaruprofilerna du kan prova, och berätta för oss vad som fungerade bäst för dig.

py-spion

py-spion är en utmärkt samplingsprofilerare för Python. Detta gör att du kan få en smygtitt på alla saker som din Python-baserade applikation lägger tid på.

För detta behöver du inte ändra dina koder eller starta om programmet helt och hållet. py-spy involverar låg overhead och är utvecklad i Rust för att köra högre hastighet. Det är inte byggt för att fungera i samma process som ditt profilerade python-baserade program körs. Detta innebär att py-spy är mycket säker och säker att använda mot de Python-baserade produktionskoderna.

Verktyget gör att du kan spela in profiler, generera flammagrafer för att skapa interaktiva SVG-filer. Du kan också se andra alternativ, som att ändra samplingsfrekvenser, inbyggda C-tillägg för profilering, underprocesser, tråd-ID och mer. Du kan få en livevy av funktioner som händer i dina program med ”top”-kommandot och visa den nuvarande anropsstacken med ”dump”-kommandot för varje python-tråd.

Den stöder alla CPython-tolkversioner, som 2.3 – 2.7 & 3.3 – 3.8. Du kan installera py-spy från PyPI eller GitHub.

Pyroskop

Programvaran för kontinuerlig profilering med öppen källkod Pyroskop hjälper dig att felsöka alla prestandaproblem i din applikation på några minuter.

Du kan starta servern följt av agenten oavsett vad du använder, Docker, Linux, eller letar efter Ruby eller Go-dokument, Pyroscope täcker dig. Även om du siktar på tio sekunder eller tio månader av mjukvaruprofileringsdata, gör deras specialdesignade lagringsmotor snabba frågor.

Du behöver inte oroa dig för overhead eller applikationsprestanda eftersom de använder samplingsprofileringsteknik som inte påverkar prestandan. Pyroscope lagrar dina profileringsdata effektivt; därför är det kostnadseffektivt för dig även om du vill lagra olika profileringsdata från olika applikationer i flera år.

Det fungerar på macOS, Linux och Docker och stöder program skrivna i Python, Go och Ruby.

Bubbleprof

Bubbleprof av Clinic.js ger ett nytt och unikt sätt att profilera din programvara skriven i Node.js. Den använder ett ”bubbla”-gränssnitt som hjälper alla från experter till nybörjare att bestämma asynkron tid som spenderas i din app.

Den visualiserar hur dina Node.js-processer fungerar genom att observera dess asynkroniserade operationer, gruppera dem, beräkna förseningarna och kartlägga dem.

Bubbleprof bestämmer operationstiderna genom att titta på storleken på bubblor inom en specifik grupp av operationer som kan vara din kod, en nodkärna eller en modul. Det klubbar också de intilliggande grupperna för att minska röran.

För att beräkna fördröjningarna när operationen flyter från en grupp till en annan, mäter Bubbleprof pillängden som förbinder bubblor. Utöver detta använder den olika färger i mätprocesserna också. Samtidigt representerar de inre färgade linjerna en blandning av asynkronoperationstyper som orsak till fördröjningen.

Pyinstrument

Optimera dina Python-koder med Pyinstrument.

Den visar dig varför din Python-kod är långsam och hjälper dig att diagnostisera problemen så att du kan få den där blixtrande snabba prestandan.

För att använda Pyinstrument behöver du inte skriva ett Python-skript; ring bara Pyinstrument direkt med kommandoraden. Ditt skript skulle köras normalt, och verktyget skulle ge en färgad sammanfattning av de områden där programmet tillbringade sin tid. Den kommer också med ett Python API som gör processen ännu enklare.

Du har möjlighet att profilera webbförfrågningar även i Flask och Django, för vilka de har utförd dokumentation. Observera här att Pyinstrument erbjuder statistisk profilering som registrerar anropsstacken var 1 ms istället för att spåra varje funktionsanrop som görs av ditt program.

Det är fördelaktigt eftersom statistiska profiler innebär lägre overhead jämfört med spårningsprofilerare. Eftersom den registrerar hela stacken blir det enkelt att spåra dyra funktionsanrop. Utöver detta döljer Pyinstrument också (som standard) biblioteksramar, så att du kan fokusera på applikationer eller moduler som är ansvariga för att påverka prestandan.

Att felsöka prestandaproblem görs enklare eftersom Pyinstrument registrerar tid som spenderas med ”väggklocka”. Verktyget spårar hela programmets tid för att läsa filer, ladda ner data, kommunicera till en databas, etc.

Xdebug

För att förbättra kodens prestandaproblem och göra din utvecklingsupplevelse lite roligare, Xdebug kommer med omfattande möjligheter för profilering och felsökning.

Det är faktiskt en PHP-tillägg som låter dig hitta flaskhalsarna i din PHP-applikation och analysera dess prestanda med hjälp av externa visualiseringsverktyg för att generera prestandagrafer.

Xdebug skapar en detaljerad utdata som visar programmets väg till att nå ett fel, inklusive parametrarna som den skickade till en given funktion. Detta görs för att spåra felen. För att hjälpa en utvecklare att förstå saker tydligt genererar den färgkodad information tillsammans med strukturerade vyer.

Den kommer också med en fjärrfelsökare som du kan använda för att ansluta Xdebug med en körande kod, IDE eller webbläsare för att se kodbrytpunkter och exekvera koderna rad för rad. En annan funktion som den erbjuder är kodtäckning som visar hur mycket ditt programs kod exekveras, och det hjälper dig också med enhetstester.

SPX

Enkel profileringstillägg (SPX) är ett profileringstillägg designat för PHP. Den har några unika egenskaper som skiljer den från andra profileringstillägg. Det är helt GRATIS att använda och begränsat till bara din infrastruktur, vilket innebär att det inte finns någon risk för dataläckor.

SPX:s enkelhet gör det mycket enkelt att använda: allt du behöver är att ställa in en kommandorad eller miljövariabel för att profilera ett skript. Eller så kan du också slå på alternativknappen på en webbsida för att profilera skriptet. Som ett resultat behöver du inte instrumentera din kod manuellt.

Det stöder också ett körande kommandoradsskript – Ctrl-C. Utöver detta eliminerar denna process också behovet av att använda en kommandoradsstartare eller dedikerad webbläsartillägg. SPX stöder flera mätvärden på cirka 22, inklusive olika tids- och minnesmått, objekt, filer som används, I/O, etc.

Den kan samla in data utan att lämna sammanhanget. Dess webbgränssnitt tillåter konfigurering/aktivering av profilering för webbläsarsessionen som för närvarande används och listar alla profilerade skriptdetaljer och rapporter. Webbgränssnittet låter dig välja en specifik rapport för djupare analys och har några interaktiva visualiseringar som Flamegraph, platt profil och tidslinje som kan skalas till funktionsanrop i miljoner.

Prefix

Prefix av Stackify är en lättinstallerad och lätt kodprofilerare som många utvecklare älskar. Det hjälper dig att eliminera flaskhalsarna i din applikations prestanda för att optimera den och förbättra användarupplevelsen.

Prefixs överlägsna spårnings- och profileringsmöjligheter gör att du snabbt kan hitta dolda undantag, långsamma SQL-frågor och mer. Det ger dina utvecklare den verkliga kraften hos APM (application performance monitoring). För detta validerar Prefix kodprestandan så som den är skriven och låter dig trycka koder med bättre prestanda för att testa.

På så sätt får den färre supportbiljetter från produktionssidan och hjälper utvecklingsansvariga att nå målen tidigare. Upptäck alla underpresterande frågor, okända flaskhalsar och ORM-genererade frågor.

Du kan också spåra varje SQL-anropsparameter, ladda ner tiderna och se de berörda posterna. Prefix gör det enklare att upptäcka N+1-mönster också. Glöm att sortera igenom alla de där röriga stockarna; sammanför dem för att lätt kunna hitta problem.

Prefix låter dig hitta sammanhanget för en misstänkt logg i en frågeförfrågan direkt och hoppa från en logg till en spårning för felsökning utan ansträngning. Prefix belyser dåligt presterande beroenden, vilket är användbart för att hitta dolda undantag och arbeta med äldre kod eller ramavsnitt. Dessa beroenden kan vara webbtjänster, tredjepartstjänster, cachetjänster och andra.

Prefix fungerar på Windows och Mac och stöder .Net, Ruby, Java, PHP, Python och Node.js.

Skalen

Skalen är en högprecision, högpresterande GPU, CPU och minnesprofilerare för Python-baserade program. Det erbjuder flera fördelar jämfört med andra profilerare, såsom löpande beställningar av snabbare storlek och att leverera mer djupgående information.

Scalene är otroligt snabb och använder sampling snarare än instrumentering. Den förlitar sig inte ens på Pythons spårningsfaciliteter. Utöver detta är dess omkostnad vanligtvis under 10-20%. Det här verktyget utför programvaruprofilering på linjenivå och pekar på de rader med koder som är ansvariga för programmets exekveringstid.

Dessa detaljer är mer värdefulla än de vid profilering på funktionsnivå. Scalene separerar tiden som spenderas enbart i Python från den för inbyggd kod som inkluderar bibliotek. Eftersom de flesta Python-programmerare inte kommer att optimera inbyggd kodprestanda, kan utvecklare fokusera sina ansträngningar på att optimera koder som du faktiskt kan förbättra.

Den markerar hotspots i rött som gör det lättare för dig att upptäcka CPU-tid/minnestilldelning och enkelt separera systemtid för att hitta I/O-problem. Scalene kan rapportera GPU-tid, profilera minnesanvändning och spåra CPU-användning. Scalene kan också identifiera möjliga minnesläckor, profilkopieringsvolym och generera reducerade profiler för kodlinjer som förbrukar mer än 1 % av CPU:n.

VisualVM

Allt-i-ett-felsökningsverktyget för Java, VisualVM, är utformad för att användas för både produktions- och utvecklingsfasen. Det är en visuell programvara som integrerar lättviktsprofileringsfunktioner och kommandorads JDK-verktyg.

VisualVM övervakar applikationer som körs på Java 1.4+ och felsöker dem med hjälp av flera tekniker som JMX, jvmstat, Attach API och Serviceability Agent. Det här verktyget passar perfekt för olika krav från kvalitetsingenjörer, systemadministratörer och slutanvändare.

Den upptäcker automatiskt Java-baserade program som körs på distans och lokalt och listar dem. Verktyget låter dig också definiera programmen manuellt med JMX-anslutningen. För varje process visar den typiska runtime-data som PID, argument som skickats, JDK-hem, huvudklass, JVM-flaggor, JVM-version och system- och argumentegenskaper.

VisualVM övervakar CPU-användning, heap och metaspace eller permanent generationsminne, löpande trådar och inlästa klasser i en applikation. Den visar alla löpande trådar i en tidslinje med aggregerade sömn-, löp-, park-, monitor- och väntetider.

Både instrumenterings- och samplingsprofiler kan utföras med VisualVM för minneshantering och applikationsprestanda. Den visar tråddumpar för att ge snabba insikter i processer. Den visar och skapar även .hprof-ögonblicksbilder på begäran för att hjälpa dig att upptäcka ineffektiviteter vid användning av högar och felsöka minnesläckor.

Dessutom kan VisualVM läsa grundläggande data om en kraschad Java-baserad process tillsammans med dess miljö. Du kan analysera dina appar offline; det kan spara appkörningsmiljö och konfiguration med tagna heap-dumpar, tråddumpar och profileringsögonblicksbilder som du kan bearbeta offline i ett senare skede.

Det fungerar på Windows, Linux och Unix.

Orbit Profiler

Visualisera din C/C++-applikation och hitta prestandaproblem snabbt med hjälp av Orbit Profiler. Detta är ett felsökningsverktyg och fristående profiler som syftar till att hjälpa utvecklare att se och förstå den komplexa appens exekveringsflöde.

Den ger en skarp bild av allt som händer inuti appen så att du snabbt kan eliminera prestandaflaskhalsarna och återställa din applikations höga prestanda.

Orbit Profiler kan fungera effektivt på vilken C- eller C++-app som helst, förutsatt att den kan komma åt PDB-filen. Därefter börjar profileringen när du har laddat ner programmet. Verktyget hoppar till målprocessen, kopplar sig till utvalda funktioner och utför profilering.

Det kan till och med fungera på dina optimerade slut- eller leveransbyggen. Förutom dynamisk instrumentering erbjuder Orbit Profiler också ”alltid på” samplingsmöjligheter, som är snabb, tillgänglig hela tiden och robust.

Det fungerar på Windows och Linux.

Uber JVM Profiler

Spetsad med avancerade profileringsmöjligheter, Uber JVM Profiler är ett annat bra alternativ för dina Java-baserade applikationer.

Den erbjuder en Java-agent som samlar in flera stackspår och mätvärden för Spark/Hadoop JVM-processer på ett distribuerat sätt, till exempel minnes-/CPU/IO-mått.

Verktyget kan spåra java-argument och -metoder på användarkoder utan att ändra dem. Du kan också använda den för att spåra samtalslatensen för HDFS-namnnoder för alla Spark-appar och hitta problem. Den kan till och med spåra Spark-appens HDFS-filsökvägar för att ta reda på heta filer och utföra ytterligare optimering.

Uber JVM Profiler skapades ursprungligen för att profilera Spark-appar som vanligtvis inkluderar många maskiner eller processer för en applikation. Därför kan människor enkelt korrelera mätvärden för dessa maskiner eller processer.

Verktyget fungerar dock som en typisk java-agent och du kan använda det för alla dina JVM-processer. Dess funktioner inkluderar:

  • Felsökning av minnesanvändning av Spark-appexekutorer, som java-högminne, inbyggt minne, icke-högminne, buffertpool och minnespool
  • Felsökning av CPU-användning och skräpinsamlingstid
  • Felsökning av javaklassmetoder för deras frekvens och tid eller varaktighetsprofilering
  • Argumentprofilering (felsökning och spårning av java-klassmetodanrop och dess argumentvärde)
  • Stacktrack-profilering och generering av Flamegraphs för CPU-tid
  • Felsökning av I/O-mått och JVM-trådsmått

Tracy

Tracy är ett användbart verktyg för att hjälpa utvecklare att felsöka PHP-program enkelt. Den har en vänlig design och avancerade funktioner som CLI-stöd, felsökning av AJAX-samtal och mer.

Den kan hitta och korrigera fel snabbt, dumpa variabler, logga fel, visualisera minnesförbrukning och bestämma exekveringstiden för frågor eller skript. Att använda färgkodning och markera problem i rött med tydliga förklaringar hjälper dig att enkelt visualisera undantag och fel och förstå dem.

Tracy levereras med loggningsfunktion och miljöautodetektering. Den lagrar data i loggfiler och visar serverfelmeddelanden för en besökare under driftstopp. Tracy kan också integrera med Drupal 7, OpenCart, WordPress och mer.

vprof

vprof är en visuell profilerare för Python-applikationer. Det ger rika, interaktiva visualiseringar för ditt Python-programs olika egenskaper, såsom minnesanvändning och körtid.

Den är tillgänglig under en BSD-licens och stöder Python 3.4 och högre.

Slutsats

Applikationsprestanda är en avgörande faktor för att uppfylla slutanvändarnas förväntningar. Och om prestandaproblem uppstår måste du vara redo att diagnostisera problemet innan du påverkar slutanvändarupplevelsen.

Fortsätt därför att optimera dina applikationer och åtgärda problemen omedelbart för att fortsätta leverera supersnabb applikationsprestanda till användarna som använder verktygen som jag har nämnt i den här artikeln.

Här är en snabb jämförelsetabell som visar ovanstående profiler och vad den mest används till.

namn
språk
py-spion
Pytonorm
Pyroskop
Python, Ruby, Go
Bubbleprof
Node.js
Pyinstrument
Pytonorm
Xdebug
PHP
SPX
PHP
Prefix
Python, .NET, Java, Node.js, Ruby, PHP
Skalen
Pytonorm
VisualVM
Java
Orbit Profiler
C, C++
Uber JVM Profiler
Java
Tracy
PHP
vprof
Pytonorm