13 Profileringssoftware til fejlfinding af applikationsydelsesproblem

Formålet med din ansøgning er at tjene dine slutbrugere godt.

Den skal være hurtig, lydhør, nem at bruge og pålidelig, blandt andre ønskværdige funktionaliteter.

Men at vedligeholde din software på en måde, der bliver ved med at levere ydeevne på topniveau, er ikke så let.

Når din kode begynder at kalde unødvendige funktioner, snubler over sig selv, fanger fejl og går i ekstra loops, kan det resultere i ineffektivitet. Din ansøgning kan blive træg, ikke reagerer eller opføre sig uregelmæssigt.

Og hvis du ikke løser disse problemer, lider den overordnede applikationsydelse.

Dine kunder kan derfor blive irriterede eller helt stoppe med at bruge din applikation på grund af dårlig ydeevne og langsom hastighed. Det forringer ikke kun dit omdømme, men koster dig også i form af omsætning og fortjeneste. Derfor skal din kode analyseres, gennemgås og fejlfindes for at opnå optimal ydeevne. Og den hurtige måde at gøre det på er ved at bruge et softwareprofileringsværktøj til at overvåge og fejlsøge dine koder og eliminere ydeevnerelaterede flaskehalse.

I denne artikel lærer du om softwareprofilering, og hvordan det kan hjælpe dig. Og så vil jeg lede dig gennem nogle af de bedste profileringsværktøjer til at fejlsøge din applikation og optimere dens ydeevne.

Hvad er softwareprofilering?

Softwareprofilering er en dynamisk kodeanalyse, hvor et programs adfærd undersøges ved hjælp af de data, der indsamles, mens programmet kører. Det har til formål at bestemme forskellige programsektioner, som du skal optimere for at øge applikationshastigheden, reaktionsevnen og reducere dens hukommelse og ressourceforbrug.

En softwareprofiler måler almindeligvis varigheden og frekvensen af ​​funktionsopkald sammen med hukommelses- eller tidskompleksitet forbundet med et program. Der er også specifikke profiler tilgængelige, som hukommelsesprofilere.

Profilering udføres generelt ved at instrumentere programmets kildekode. Profilere kan bruge forskellige teknikker til profilering, såsom instrumenterede, hændelsesbaserede, statistiske eller simuleringsmetoder.

Hvorfor betyder softwareprofilering noget?

Softwareprofilering er nødvendig for at bestemme ressourceforbruget og udførelsestiden forbundet med en specifik funktion. Det hjælper med at optimere programmets hastighed og samtidig sikre, at det bruger minimale ressourcer.

Ydermere er det gjort for at spore og optimere CPU-brug og kommandoudførelsestid.

Derfor er det nødvendigt at vælge det rigtige softwareprofileringsværktøj for at sikre, at du kan fejlsøge de præstationsrelaterede problemer hurtigere for at forbedre effektiviteten og give en bedre slutbrugeroplevelse. Mange profilere kommer også med detaljerede rapporter og interaktive grafer og visualiseringer, der hjælper dig med at finde den nøjagtige årsag til problemerne, hvilket gør det nemmere at løse dem.

Så her er en liste over nogle af de bedste softwareprofiler, du kan prøve, og fortæl os, hvad der virkede bedst for dig.

py-spion

py-spion er en fremragende sampling profiler til Python. Dette giver dig mulighed for at få et smugkig på alle de ting, din Python-baserede applikation bruger tid på.

For dette behøver du ikke at ændre dine koder eller genstarte programmet helt. py-spy involverer lav overhead og er udviklet i Rust til at udføre større hastighed. Det er ikke bygget til at fungere i den samme proces, hvor dit profilerede python-baserede program kører. Dette indebærer, at py-spy er meget sikker og sikker at bruge mod de Python-baserede produktionskoder.

Værktøjet giver dig mulighed for at optage profiler, generere flammegrafer for at skabe interaktive SVG-filer. Du kan også se andre muligheder, såsom ændring af samplinghastigheder, indbyggede C-udvidelser til profilering, underprocesser, tråd-id’er og mere. Du kan få en live visning af funktioner, der sker i dine programmer, ved at bruge ‘top’-kommandoen og vise den aktuelle opkaldsstak ved hjælp af ‘dump’-kommandoen for hver python-tråd.

Den understøtter alle CPython-tolkeversioner, såsom 2.3 – 2.7 & 3.3 – 3.8. Du kan installere py-spy fra PyPI eller GitHub.

Pyroskop

Open source-softwaren til kontinuerlig profilering af Pyroskop hjælper dig med at debugge alle ydeevneproblemer i din applikation på få minutter.

Du kan starte serveren efterfulgt af agenten, uanset hvad du bruger, Docker, Linux, eller leder efter Ruby eller Go-dokumenter, Pyroscope dækker dig. Selvom du sigter efter ti sekunder eller ti måneders softwareprofileringsdata, laver deres specialdesignede lagermotor hurtige forespørgsler.

  Denne søgemaskine kan finde enhver Calvin & Hobbes tegneserie baseret på søgeord

Du behøver ikke bekymre dig om overhead eller applikationsydelse, da de bruger samplingsprofileringsteknologi, der ikke påvirker ydeevnen. Pyroscope gemmer dine profileringsdata effektivt; derfor er det omkostningseffektivt for dig, selvom du ønsker at gemme forskellige profileringsdata fra forskellige applikationer i årevis.

Det virker på macOS, Linux og Docker og understøtter programmer skrevet i Python, Go og Ruby.

Bubbleprof

Bubbleprof af Clinic.js giver en frisk og unik måde at profilere din software på skrevet i Node.js. Den bruger en “boble”-brugergrænseflade, der hjælper alle fra eksperter til begyndere med at bestemme asynkron tid brugt i din app.

Den visualiserer, hvordan dine Node.js-processer fungerer ved at observere dens asynkroniserede operationer, gruppere dem, beregne forsinkelserne og kortlægge dem.

Bubbleprof bestemmer operationstidspunkter ved at se på størrelsen af ​​bobler inden for en specifik gruppe af operationer, der kan være din kode, en nodekerne eller et modul. Det klubber også de tilstødende grupper for at mindske rod.

For at beregne forsinkelserne, når operationen flyder fra en gruppe til en anden, måler Bubbleprof pillængden, der forbinder bobler. Ud over dette bruger den også forskellige farver i måleprocesserne. Samtidig repræsenterer de indre farvede linjer en blanding af asynkronoperationstyper som årsag til forsinkelsen.

Pyinstrument

Optimer dine Python-koder med Pyinstrument.

Det viser dig, hvorfor din Python-kode er langsom og hjælper dig med at diagnosticere problemerne, så du kan få den lynhurtige ydeevne.

For at bruge Pyinstrument behøver du ikke at skrive et Python-script; bare ring til Pyinstrument ved hjælp af kommandolinjen direkte. Dit script ville køre normalt, og værktøjet ville give en farvet oversigt over de områder, hvor applikationen brugte sin tid. Den kommer også med en Python API, der gør processen endnu nemmere.

Du har også mulighed for at profilere webanmodninger i Flask og Django, som de har vedligeholdt omfattende dokumentation for. Bemærk her, at Pyinstrument tilbyder statistisk profilering, der registrerer opkaldsstakken hver 1 ms i stedet for at spore hvert funktionskald foretaget af dit program.

Det er fordelagtigt, da statistiske profiler involverer lavere overhead sammenlignet med sporingsprofilere. Da den optager hele stakken, bliver det nemt at spore dyre funktionsopkald. Ud over dette skjuler Pyinstrument også (som standard) biblioteksrammer, så du kan fokusere på applikationer eller moduler, der er ansvarlige for at påvirke ydeevnen.

Fejlfinding af ydeevneproblemer er gjort lettere, fordi Pyinstrument registrerer tid brugt ved at bruge ‘vægur’-tid. Værktøjet sporer al programmets tid til at læse filer, downloade data, kommunikere til en database osv.

Xdebug

For at forbedre din kodes ydeevneproblemer og gøre din udviklingsoplevelse lidt sjovere, Xdebug leveres med en bred vifte af muligheder for profilering og fejlretning.

Det er faktisk en PHP-udvidelse, der giver dig mulighed for at finde flaskehalsene i din PHP-applikation og analysere dens ydeevne ved hjælp af eksterne visualiseringsværktøjer til at generere præstationsgrafer.

Xdebug opretter et detaljeret output, der viser applikationens sti til at nå en fejl, inklusive de parametre, den har sendt til en given funktion. Dette gøres for at spore fejlene. For at hjælpe en udvikler med at forstå tingene klart, genererer den farvekodet information sammen med strukturerede visninger.

Den leveres også med en fjerndebugger, som du kan bruge til at forbinde Xdebug med en kørende kode, IDE eller browser for at se kodebrudpunkter og udføre koderne linje for linje. En anden funktion, den tilbyder, er kodedækning, der viser, hvor meget dit programs kode blev udført, og det hjælper dig også med enhedstester.

SPX

Simple Profiling Extension (SPX) er en profiludvidelse designet til PHP. Den har nogle unikke egenskaber, der adskiller den fra andre profiludvidelser. Det er helt GRATIS at bruge og begrænset til kun din infrastruktur, hvilket betyder, at der ikke er nogen risiko for datalæk.

SPX’s enkelhed gør det meget nemt at bruge: alt hvad du behøver er at indstille en kommandolinje eller miljøvariabel til at profilere et script. Eller du kan også slå alternativknappen til på en webside for at profilere scriptet. Som et resultat behøver du ikke instrumentere din kode manuelt.

  Sådan tilføjer du alternativ tekst til et objekt i PowerPoint

Det understøtter også et kørende kommandolinjescript – Ctrl-C. Ud over dette eliminerer denne proces også behovet for at bruge en kommandolinjestarter eller dedikeret browserudvidelse. SPX understøtter multimetrikker på omkring 22, inklusive forskellige tids- og hukommelsesmetrikker, objekter, filer i brug, I/O osv.

Det kan indsamle data uden at forlade konteksten. Dens web-UI gør det muligt at konfigurere/aktivere profilering for den browsersession, der aktuelt er i brug, og viser alle de profilerede scriptdetaljer og rapporter. Webbrugergrænsefladen lader dig vælge en specifik rapport til dybere analyse og indeholder nogle interaktive visualiseringer såsom Flamegraph, flad profil og tidslinje, der kan skaleres til funktionsopkald i millioner.

Præfiks

Præfiks af Stackify er en nem at installere og let kodeprofiler, som mange udviklere elsker. Det hjælper dig med at fjerne flaskehalsene i din applikations ydeevne for at optimere den og forbedre brugeroplevelsen.

Prefix’s overlegne sporings- og profileringsmuligheder giver dig mulighed for hurtigt at finde skjulte undtagelser, langsomme SQL-forespørgsler og meget mere. Det giver dine udviklere den reelle kraft fra APM (overvågning af applikationsydelse). Til dette validerer Prefix kodens ydeevne, som den er skrevet, og giver dig mulighed for at skubbe bedre ydende koder for at teste.

På den måde får den færre supportbilletter fra produktionssiden og hjælper udviklingsansvarlige med at nå målene hurtigere. Opdag alle de underpræsterende forespørgsler, ukendte flaskehalse og ORM-genererede forespørgsler.

Du kan også spore hver SQL-opkaldsparameter, downloade timings og se de berørte poster. Præfiks gør det også nemmere at se N+1-mønstre. Glem alt om at sortere gennem alle de rodede logfiler; bringe dem sammen for nemt at finde problemer.

Præfiks lader dig finde konteksten for en mistænkelig log i en forespørgselsanmodning direkte og hoppe fra én log til en sporing for ubesværet fejlfinding. Præfiks kaster lys over dårligt ydende afhængigheder, hvilket er nyttigt til at finde skjulte undtagelser og arbejde med ældre kode eller rammeafsnit. Disse afhængigheder kan være webtjenester, tredjepartstjenester, cachetjenester og andre.

Præfiks virker på Windows og Mac og understøtter .Net, Ruby, Java, PHP, Python og Node.js.

Scaleen

Scaleen er en højpræcision, højtydende GPU, CPU og hukommelsesprofiler til Python-baserede programmer. Det giver adskillige fordele i forhold til andre profiler, såsom løbende ordrer af hurtigere størrelser og levering af mere dybdegående information.

Scalene er utrolig hurtig og bruger sampling frem for instrumentering. Den er ikke engang afhængig af Pythons sporingsfaciliteter. Ud over dette er dens overhead normalt under 10-20%. Dette værktøj udfører softwareprofilering på linjeniveau og peger på de linjer med koder, der er ansvarlige for dit programs eksekveringstid.

Disse detaljer er mere værdifulde end dem ved profilering på funktionsniveau. Scalene adskiller den tid, der udelukkende bruges i Python, fra den indfødte kode, der inkluderer biblioteker. Da de fleste Python-programmører ikke vil optimere den oprindelige kodeydeevne, kan udviklere fokusere deres indsats på at optimere koder, som du rent faktisk kan forbedre.

Den fremhæver hotspots med rødt, der gør det nemmere for dig at få øje på CPU-tid/hukommelsesallokering og nemt adskille systemtid for at finde I/O-problemer. Scalene kan rapportere GPU-tid, profilerer hukommelsesbrug og sporer CPU-brug. Scalene kan også identificere mulige hukommelseslækager, profilkopieringsvolumen og generere reducerede profiler for kodelinjer, der bruger mere end 1 % af CPU.

VisualVM

Alt-i-et fejlfindingsværktøj til Java, VisualVM, er designet til at blive brugt til både produktions- og udviklingsfasen. Det er en visuel software, der integrerer lette profileringsfunktioner og kommandolinje JDK-værktøjer.

VisualVM overvåger applikationer, der kører på Java 1.4+ og fejlfinder dem ved hjælp af flere teknologier såsom JMX, jvmstat, Attach API og Serviceability Agent. Dette værktøj passer perfekt til forskellige krav fra kvalitetsingeniører, systemadministratorer og slutbrugere.

Det registrerer fjerntliggende og lokalt kørende Java-baserede programmer automatisk og viser dem. Værktøjet giver dig også mulighed for at definere programmerne manuelt ved hjælp af JMX-forbindelsen. For hver proces viser den typiske runtime-data såsom PID, beståede argumenter, JDK-hjem, hovedklasse, JVM-flag, JVM-version og system- og argumentegenskaber.

VisualVM overvåger CPU-brug, heap og metaspace eller permanent generationshukommelse, kørende tråde og indlæste klasser i en applikation. Den viser alle de løbende tråde på en tidslinje med aggregerede søvn-, løbe-, park-, monitor- og ventetider.

Både instrumenterings- og samplingsprofiler kan udføres ved hjælp af VisualVM til hukommelsesstyring og applikationsydelse. Den viser tråddumps for at give hurtig indsigt i processer. Den ser også og opretter .hprof-snapshots på efterspørgsel for at hjælpe dig med at afdække ineffektivitet i bunkebrug og fejlfinde hukommelseslækager.

  Find dine mistede AirPods

Desuden kan VisualVM læse grundlæggende data på en nedbrudt Java-baseret proces sammen med dens miljø. Du kan analysere dine apps offline; det kan gemme app runtime miljø og konfiguration med taget heap dumps, thread dumps og profilerings snapshots, som du kan behandle offline på et senere tidspunkt.

Det virker på Windows, Linux og Unix.

Orbit Profiler

Visualiser din C/C++-applikation og find ydelsesproblemer hurtigt ved hjælp af Orbit Profiler. Dette er et fejlfindingsværktøj og selvstændig profiler, der har til formål at hjælpe udviklere med at se og forstå den komplekse apps eksekveringsflow.

Det giver et skarpt overblik over alt, der sker inde i appen, så du hurtigt kan eliminere flaskehalse i ydeevnen og genoprette din applikations høje ydeevne.

Orbit Profiler kan arbejde effektivt på enhver C- eller C++-app, forudsat at den kan få adgang til PDB-filen. Dernæst begynder det at profilere, når du har fuldført download af dets program. Værktøjet hopper til målprocessen, kobler sig til udvalgte funktioner og udfører profilering.

Det kan endda fungere på dine optimerede slut- eller forsendelsesbygninger. Bortset fra dynamisk instrumentering tilbyder Orbit Profiler også ‘always on’ samplingsfunktioner, som er hurtig, tilgængelig hele tiden og robust.

Det virker på Windows og Linux.

Uber JVM Profiler

Fyldt med avancerede profileringsmuligheder, Uber JVM Profiler er en anden god mulighed for dine Java-baserede applikationer.

Det tilbyder en Java Agent, der indsamler flere stakspor og metrics for Spark/Hadoop JVM-processer på en distribueret måde, for eksempel hukommelse/CPU/IO-metrikker.

Værktøjet kan spore java-argumenter og -metoder på brugerkoder uden at ændre dem. Du kan også bruge den til at spore opkaldsforsinkelsen for HDFS-navneknuder for alle Spark-apps og finde problemer. Den kan endda spore Spark-appens HDFS-filstier for at finde ud af varme filer og udføre yderligere optimering.

Uber JVM Profiler blev oprindeligt oprettet for at profilere Spark-apps, der generelt omfatter mange maskiner eller processer til én applikation. Derfor kan folk nemt korrelere metrics for disse maskiner eller processer.

Værktøjet fungerer dog som en typisk java-agent, og du kan bruge det til enhver af dine JVM-processer. Dens funktioner omfatter:

  • Fejlfinding af hukommelsesbrug af Spark app eksekvere, såsom java heap memory, native memory, non-heap memory, buffer pool og memory pool
  • Fejlretning af CPU-brug og affaldsindsamlingstid
  • Fejlretning af java-klassemetoder for deres frekvens og tid eller varighedsprofilering
  • Argumentprofilering (fejlretning og sporing af java-klassemetodekald og dets argumentværdi)
  • Stacktrack-profilering og generering af Flamegraphs til CPU-tid
  • Fejlretning af I/O-metrics og JVM Thread-metrics

Tracy

Tracy er et nyttigt værktøj til at hjælpe udviklere med at debugge PHP-programmer nemt. Den har et venligt design og avancerede funktioner såsom CLI-understøttelse, fejlfinding af AJAX-opkald og mere.

Den kan hurtigt finde og rette fejl, dumpe variabler, logge fejl, visualisere hukommelsesforbrug og bestemme udførelsestiden for forespørgsler eller scripts. Brug af farvekodning og fremhævelse af problemer i rødt med klare forklaringer hjælper dig med nemt at visualisere undtagelser og fejl og forstå dem.

Tracy kommer med logningsfunktionalitet og miljøautodetektion. Det gemmer data i logfiler og viser serverfejlmeddelelser til en besøgende under nedetider. Tracy kan også integrere med Drupal 7, OpenCart, WordPress og mere.

vprof

vprof er en visuel profiler til Python-applikationer. Det giver rige, interaktive visualiseringer til dit Python-programs forskellige karakteristika, såsom hukommelsesforbrug og køretid.

Den er tilgængelig under en BSD-licens og understøtter Python 3.4 og nyere.

Konklusion

Applikationsydelse er en afgørende faktor for at opfylde forventningerne hos slutbrugerne. Og hvis der opstår problemer med ydeevnen, skal du være klar til at diagnosticere problemet, før du påvirker slutbrugeroplevelsen.

Bliv derfor ved med at optimere dine applikationer og løs problemerne med det samme for at fortsætte med at levere superhurtig applikationsydelse til brugerne, der bruger de værktøjer, jeg har nævnt i denne artikel.

Her er en hurtig sammenligningstabel, der viser ovenstående profiler, og hvad det mest bruges til.

Navn
Sprog
py-spion
Python
Pyroskop
Python, Ruby, Go
Bubbleprof
Node.js
Pyinstrument
Python
Xdebug
PHP
SPX
PHP
Præfiks
Python, .NET, Java, Node.js, Ruby, PHP
Scaleen
Python
VisualVM
Java
Orbit Profiler
C, C++
Uber JVM Profiler
Java
Tracy
PHP
vprof
Python