13 Profileringsprogramvare for å feilsøke applikasjonsytelsesproblem

Hensikten med søknaden din er å tjene sluttbrukerne dine godt.

Den må være rask, responsiv, enkel å bruke og pålitelig, blant andre ønskelige funksjoner.

Men å vedlikeholde programvaren på en måte som fortsetter å levere ytelse på toppnivå er ikke så lett.

Når koden din begynner å kalle unødvendige funksjoner, snubler over seg selv, fanger feil og går inn i ekstra looper, kan det resultere i ineffektivitet. Applikasjonen din kan bli treg, ikke reagerer eller oppføre seg uberegnelig.

Og hvis du ikke fikser disse problemene, lider den generelle applikasjonsytelsen.

Følgelig kan kundene dine bli irriterte eller slutte å bruke applikasjonen din helt på grunn av dårlig ytelse og lav hastighet. Det forringer ikke bare omdømmet ditt, men koster deg også i form av inntekter og fortjeneste. Derfor må koden din analyseres, gjennomgås og feilsøkes for å oppnå optimal ytelse. Og den raske måten å gjøre det på er å bruke et programvareprofileringsverktøy for å overvåke og feilsøke kodene dine og eliminere ytelsesrelaterte flaskehalser.

I denne artikkelen lærer du om programvareprofilering og hvordan det kan hjelpe deg. Og så vil jeg lede deg gjennom noen av de beste profileringsverktøyene for å feilsøke applikasjonen din og optimalisere ytelsen.

Hva er programvareprofilering?

Programvareprofilering er en dynamisk kodeanalyse der et programs oppførsel undersøkes ved hjelp av dataene som samles inn mens programmet kjører. Den tar sikte på å bestemme ulike programseksjoner som du må optimalisere for å øke applikasjonshastigheten, responsen og redusere minnet og ressursforbruket.

En programvareprofiler måler vanligvis varigheten og frekvensen av funksjonsanrop sammen med minne eller tidskompleksitet knyttet til et program. Det er også spesifikke profiler tilgjengelig, som minneprofilere.

Profilering utføres vanligvis ved å instrumentere programmets kildekode. Profilere kan bruke forskjellige teknikker for profilering som instrumenterte, hendelsesbaserte, statistiske eller simuleringsmetoder.

Hvorfor er programvareprofilering viktig?

Programvareprofilering er nødvendig for å bestemme ressursbruken og utførelsestiden knyttet til en spesifikk funksjon. Det hjelper med å optimalisere programmets hastighet og samtidig sikre at det bruker minimalt med ressurser.

Videre er det gjort for å spore og optimalisere CPU-bruk og kommandoutførelsestid.

Derfor er det nødvendig å velge riktig programvareprofileringsverktøy for å sikre at du kan feilsøke ytelsesrelaterte problemer raskere for å forbedre effektiviteten og gi en bedre sluttbrukeropplevelse. Mange profiler kommer også med detaljerte rapporter og interaktive grafer og visualiseringer som hjelper deg med å finne den nøyaktige årsaken til problemene, noe som gjør det lettere å løse dem.

Så her er en liste over noen av de beste programvareprofilerne du kan prøve, og fortell oss hva som fungerte best for deg.

py-spion

py-spion er en utmerket samplingsprofiler for Python. Dette lar deg få en sniktitt på alle tingene din Python-baserte applikasjon bruker tid på.

For dette trenger du ikke å endre kodene eller starte programmet på nytt. py-spy innebærer lav overhead og er utviklet i Rust for å utføre høyere hastighet. Det er ikke bygget for å operere i samme prosess som det profilerte python-baserte programmet kjører. Dette innebærer at py-spy er svært trygt og sikkert å bruke mot produksjons Python-baserte koder.

Verktøyet lar deg registrere profiler, generere flammegrafer for å lage interaktive SVG-filer. Du kan også se andre alternativer, som å endre samplingsfrekvenser, native C-utvidelser for profilering, underprosesser, tråd-ID-er og mer. Du kan få en live-visning av funksjoner som skjer i programmene dine ved å bruke «topp»-kommandoen og vise gjeldende anropsstabel ved å bruke «dump»-kommandoen for hver python-tråd.

Den støtter alle CPython-tolkversjoner, for eksempel 2.3 – 2.7 og 3.3 – 3.8. Du kan installere py-spy fra PyPI eller GitHub.

Pyroskop

Programvaren for åpen kildekode for kontinuerlig profilering av Pyroskop hjelper deg å feilsøke alle ytelsesproblemer i applikasjonen din på få minutter.

Du kan starte serveren etterfulgt av agenten uansett hva du bruker, Docker, Linux, eller leter etter Ruby eller Go-dokumenter, Pyroscope dekker deg. Selv om du sikter på ti sekunder eller ti måneder med programvareprofileringsdata, gjør deres spesialdesignede lagringsmotor raske spørsmål.

  Slik setter du inn et bilde eller annet objekt i Microsoft Office

Du trenger ikke å bekymre deg for overhead eller applikasjonsytelse, siden de bruker samplingsprofileringsteknologi som ikke påvirker ytelsen. Pyroscope lagrer profileringsdataene dine effektivt; derfor er det kostnadseffektivt for deg selv om du ønsker å lagre ulike profileringsdata fra ulike applikasjoner i årevis.

Den fungerer på macOS, Linux og Docker, og støtter programmer skrevet i Python, Go og Ruby.

Bubbleprof

Bubbleprof av Clinic.js gir en fersk og unik måte å profilere programvaren din skrevet i Node.js. Den bruker et «boble»-grensesnitt som hjelper alle, fra eksperter til nybegynnere, med å bestemme asynkron tid brukt i appen din.

Den visualiserer hvordan Node.js-prosessene dine fungerer ved å observere dens asynkroniserte operasjoner, gruppere dem, beregne forsinkelsene og kartlegge dem.

Bubbleprof bestemmer operasjonstidene ved å se på størrelsen på bobler innenfor en bestemt gruppe operasjoner som kan være koden din, en nodekjerne eller en modul. Den klubber også de tilstøtende gruppene for å redusere rot.

For å beregne forsinkelsene når operasjonen flyter fra en gruppe til en annen, måler Bubbleprof pillengden som forbinder bobler. I tillegg til dette bruker den forskjellige farger i måleprosessene også. Samtidig representerer de indre fargede linjene en blanding av asynkronoperasjonstyper som årsak til forsinkelsen.

Pyinstrument

Optimaliser Python-kodene dine med Pyinstrument.

Den viser deg hvorfor Python-koden din er treg og hjelper deg med å diagnostisere problemene slik at du kan ha den lynraske ytelsen.

For å bruke Pyinstrument, trenger du ikke å skrive et Python-skript; bare ring Pyinstrument ved å bruke kommandolinjen direkte. Skriptet ditt ville kjøre normalt, og verktøyet ville gi et farget sammendrag av områdene der applikasjonen brukte sin tid. Den kommer også med et Python API som gjør prosessen enda enklere.

Du har muligheten til å profilere nettforespørsler i Flask og Django også, som de har opprettholdt omfattende dokumentasjon for. Her, vær oppmerksom på at Pyinstrument tilbyr statistisk profilering som registrerer anropsstabel hver 1 ms i stedet for å spore alle funksjonskall gjort av programmet ditt.

Det er fordelaktig siden statistiske profiler innebærer lavere overhead sammenlignet med sporingsprofiler. Ettersom den registrerer hele stabelen, blir det uanstrengt å spore dyre funksjonsanrop. I tillegg til dette skjuler Pyinstrument også (som standard) bibliotekrammer, slik at du kan fokusere på applikasjoner eller moduler som er ansvarlige for å påvirke ytelsen.

Feilsøking av ytelsesproblemer er gjort enklere fordi Pyinstrument registrerer tid brukt ved bruk av «veggklokke»-tid. Verktøyet sporer all programmets tid til å lese filer, laste ned data, kommunisere til en database osv.

Xdebug

For å forbedre kodens ytelsesproblemer og gjøre utviklingsopplevelsen litt morsommere, Xdebug kommer med omfattende muligheter for profilering og feilsøking.

Det er faktisk en PHP-utvidelse som lar deg finne flaskehalsene i PHP-applikasjonen din og analysere ytelsen ved hjelp av eksterne visualiseringsverktøy for å generere ytelsesgrafer.

Xdebug lager en detaljert utdata som viser applikasjonens bane for å nå en feil, inkludert parameterne den sendte til en gitt funksjon. Dette gjøres for å spore feilene. For å hjelpe en utvikler å forstå ting klart, genererer den fargekodet informasjon sammen med strukturerte visninger.

Den kommer også med en ekstern debugger som du kan bruke til å koble Xdebug med en kjørende kode, IDE eller nettleser for å se kodebrudd og utføre kodene linje for linje. En annen funksjon den tilbyr er kodedekning som viser hvor mye programmets kode ble utført, og det hjelper deg også med enhetstester.

SPX

Enkel profileringsutvidelse (SPX) er en profileringsutvidelse designet for PHP. Den har noen unike egenskaper, som skiller den fra andre profileringsutvidelser. Det er helt GRATIS å bruke og begrenset til bare din infrastruktur, noe som betyr at det ikke er noen risiko for datalekkasjer.

SPXs enkelhet gjør det veldig enkelt å bruke: alt du trenger er å sette en kommandolinje eller miljøvariabel for å profilere et skript. Eller du kan også slå på alternativknappen på en nettside for å profilere skriptet. Som et resultat trenger du ikke instrumentere koden manuelt.

  Slik sletter du Amazon-kontoen din

Den støtter også et kjørende kommandolinjeskript – Ctrl-C. I tillegg til dette eliminerer denne prosessen også behovet for å bruke en kommandolinjestarter eller dedikert nettleserutvidelse. SPX støtter multimetrikker på rundt 22, inkludert ulike tids- og minnemålinger, objekter, filer i bruk, I/O, etc.

Den kan samle data uten å forlate konteksten. Nettgrensesnittet tillater konfigurering/aktivering av profilering for nettleserøkten som er i bruk, og viser alle profilerte skriptdetaljer og rapporter. Nettgrensesnittet lar deg velge en spesifikk rapport for dypere analyse og har noen interaktive visualiseringer som Flamegraph, flat profil og tidslinje som kan skaleres til funksjonsanrop i millioner.

Prefiks

Prefiks av Stackify er en enkel å installere og lett kodeprofiler som mange utviklere elsker. Det hjelper deg å eliminere flaskehalsene i applikasjonsytelsen din for å optimalisere den og forbedre brukeropplevelsen.

Prefixs overlegne sporings- og profileringsmuligheter lar deg raskt finne skjulte unntak, langsomme SQL-spørringer og mer. Det gir utviklerne dine den virkelige kraften til APM (application performance monitoring). For dette validerer Prefix kodeytelsen slik den er skrevet og lar deg presse koder som gir bedre resultater for å teste.

På denne måten får den færre støttebilletter fra produksjonssiden og hjelper utviklingsledere med å nå målene tidligere. Oppdag alle underpresterende spørringer, ukjente flaskehalser og ORM-genererte spørringer.

Du kan også spore hver SQL-kall-parameter, laste ned tidspunktene og se de berørte postene. Prefiks gjør det enklere å oppdage N+1-mønstre også. Glem å sortere gjennom alle de rotete loggene; bringe dem sammen for å enkelt finne problemer.

Prefiks lar deg finne konteksten til en mistenkelig logg i en spørringsforespørsel direkte og hoppe fra én logg til en sporing for uanstrengt feilsøking. Prefiks kaster lys over dårlige resultater, noe som er nyttig for å finne skjulte unntak og arbeide med eldre kode eller rammeverkseksjoner. Disse avhengighetene kan være webtjenester, tredjepartstjenester, hurtigbuffertjenester og andre.

Prefiks fungerer på Windows og Mac og støtter .Net, Ruby, Java, PHP, Python og Node.js.

Scalene

Scalene er en høypresisjon, høyytende GPU, CPU og minneprofiler for Python-baserte programmer. Det gir flere fordeler i forhold til andre profiler, for eksempel å kjøre bestillinger av raskere størrelser og levere mer dybdeinformasjon.

Scalene er utrolig rask og bruker sampling i stedet for instrumentering. Den er ikke engang avhengig av sporingsfasilitetene til Python. I tillegg til dette er overhead vanligvis under 10-20%. Dette verktøyet utfører programvareprofilering på linjenivå og peker på de kodelinjene som er ansvarlige for programmets utførelsestid.

Disse detaljene er mer verdifulle enn de ved profilering på funksjonsnivå. Scalene skiller tiden brukt utelukkende i Python fra den for opprinnelig kode som inkluderer biblioteker. Siden de fleste Python-programmerere ikke vil optimalisere den opprinnelige kodeytelsen, kan utviklere fokusere innsatsen på å optimalisere koder som du faktisk kan forbedre.

Den fremhever hotspots i rødt som gjør det lettere for deg å oppdage CPU-tid/minnetildeling og enkelt skille systemtid for å finne I/O-problemer. Scalene kan rapportere GPU-tid, profilere minnebruk og spore CPU-bruk. Scalene kan også identifisere mulige minnelekkasjer, profilkopieringsvolum og generere reduserte profiler for kodelinjer som bruker mer enn 1 % av CPU.

VisualVM

Alt-i-ett-feilsøkingsverktøyet for Java, VisualVM, er designet for å brukes både i produksjons- og utviklingsfasen. Det er en visuell programvare som integrerer lette profileringsfunksjoner og kommandolinje JDK-verktøy.

VisualVM overvåker applikasjoner som kjører på Java 1.4+ og feilsøker dem ved hjelp av flere teknologier som JMX, jvmstat, Attach API og Serviceability Agent. Dette verktøyet passer perfekt for ulike krav til kvalitetsingeniører, systemadministratorer og sluttbrukere.

Den oppdager eksternt og lokalt kjørende Java-baserte applikasjoner automatisk og viser dem. Verktøyet lar deg også definere programmene manuelt ved å bruke JMX-tilkoblingen. For hver prosess viser den typiske kjøretidsdata som PID, beståtte argumenter, JDK-hjem, hovedklasse, JVM-flagg, JVM-versjon og system- og argumentegenskaper.

VisualVM overvåker CPU-bruk, heap og metaspace eller permanent generasjonsminne, kjørende tråder og lastede klasser i en applikasjon. Den viser alle løpende tråder i en tidslinje med aggregerte søvn-, løping-, park-, monitor- og ventetider.

Både instrumenterings- og samplingsprofiler kan utføres ved hjelp av VisualVM for minneadministrasjon og applikasjonsytelse. Den viser tråddumper for å gi rask innsikt i prosesser. Den viser også og lager .hprof-øyeblikksbilder på forespørsel for å hjelpe deg med å avdekke haugevis av ineffektivitet og feilsøke minnelekkasjer.

  Installer CyanogenMod 11 på Nexus 5

Videre kan VisualVM lese grunnleggende data på en krasjet Java-basert prosess sammen med miljøet. Du kan analysere appene dine offline; den kan lagre app-kjøretidsmiljø og -konfigurasjon med tatt heap dumps, thread dumps og profileringsøyeblikksbilder som du kan behandle offline på et senere tidspunkt.

Det fungerer på Windows, Linux og Unix.

Orbit Profiler

Visualiser C/C++-applikasjonen din og finn ytelsesproblemer raskt ved å bruke Orbit Profiler. Dette er et feilsøkingsverktøy og frittstående profiler som har som mål å hjelpe utviklere med å se og forstå den komplekse appens utførelsesflyt.

Den gir en skarp oversikt over alt som skjer inne i appen, slik at du raskt kan eliminere ytelsesflaskehalsene og gjenopprette applikasjonens høye ytelse.

Orbit Profiler kan fungere effektivt på hvilken som helst C- eller C++-app, forutsatt at den har tilgang til PDB-filen. Deretter starter profileringen når du har fullført nedlastingen av programmet. Verktøyet hopper til målprosessen, kobler seg til utvalgte funksjoner og utfører profilering.

Det kan til og med fungere på de optimaliserte slutt- eller fraktbyggene dine. Bortsett fra dynamisk instrumentering, tilbyr Orbit Profiler også «alltid på» samplingsfunksjoner, som er raske, tilgjengelige hele tiden og robuste.

Det fungerer på Windows og Linux.

Uber JVM Profiler

Med avanserte profileringsmuligheter, Uber JVM Profiler er et annet godt alternativ for dine Java-baserte applikasjoner.

Den tilbyr en Java Agent som samler inn flere stackspor og metrikker for Spark/Hadoop JVM-prosesser på en distribuert måte, for eksempel minne/CPU/IO-målinger.

Verktøyet kan spore java-argumenter og -metoder på brukerkoder uten å endre dem. Du kan også bruke den til å spore anropsforsinkelsen til HDFS-navnenoder for hver Spark-app og finne problemer. Den kan til og med spore Spark-appens HDFS-filbaner for å finne ut varme filer og utføre ytterligere optimalisering.

Uber JVM Profiler ble opprinnelig opprettet for å profilere Spark-apper som vanligvis inkluderer mange maskiner eller prosesser for én applikasjon. Derfor kan folk enkelt korrelere beregninger for disse maskinene eller prosessene.

Verktøyet fungerer imidlertid som en typisk java-agent, og du kan bruke det til alle JVM-prosessene dine. Funksjonene inkluderer:

  • Feilsøking av minnebruk av Spark-apputførere, for eksempel java-heap-minne, innebygd minne, ikke-heap-minne, bufferpool og minnepool
  • Feilsøking av CPU-bruk og søppelinnsamlingstid
  • Feilsøking av java-klassemetoder for deres frekvens og tid eller varighetsprofilering
  • Argumentprofilering (feilsøking og sporing av java-klassemetodekall og dens argumentverdi)
  • Stacktrack-profilering og generering av Flamegraphs for CPU-tid
  • Feilsøking av I/O-beregninger og JVM-trådberegninger

Tracy

Tracy er et nyttig verktøy for å hjelpe utviklere med å feilsøke PHP-programmer enkelt. Den har en vennlig design og avanserte funksjoner som CLI-støtte, feilsøking av AJAX-anrop og mer.

Den kan finne og korrigere feil raskt, dumpe variabler, logge feil, visualisere minneforbruk og bestemme utførelsestiden for spørringer eller skript. Ved å bruke fargekoding og fremheve problemer i rødt med klare forklaringer, kan du enkelt visualisere unntak og feil og forstå dem.

Tracy kommer med loggingsfunksjonalitet og miljøautodeteksjon. Den lagrer data i loggfiler og viser serverfeilmeldinger til en besøkende under nedetider. Tracy kan også integreres med Drupal 7, OpenCart, WordPress og mer.

vprof

vprof er en visuell profiler for Python-applikasjoner. Det gir rike, interaktive visualiseringer for Python-programmets forskjellige egenskaper, som minnebruk og kjøretid.

Den er tilgjengelig under en BSD-lisens og støtter Python 3.4 og nyere.

Konklusjon

Applikasjonsytelse er en avgjørende faktor for å oppfylle forventningene til sluttbrukerne. Og hvis det oppstår ytelsesproblemer, må du være klar til å diagnostisere problemet før du påvirker sluttbrukeropplevelsen.

Fortsett derfor å optimalisere applikasjonene dine og fikse problemene umiddelbart for å fortsette å levere superrask applikasjonsytelse til brukerne som bruker verktøyene jeg har nevnt i denne artikkelen.

Her er en rask sammenligningstabell som viser profilerene ovenfor og hva de brukes mest til.

Navn
Språk
py-spion
Python
Pyroskop
Python, Ruby, Go
Bubbleprof
Node.js
Pyinstrument
Python
Xdebug
PHP
SPX
PHP
Prefiks
Python, .NET, Java, Node.js, Ruby, PHP
Scalene
Python
VisualVM
Java
Orbit Profiler
C, C++
Uber JVM Profiler
Java
Tracy
PHP
vprof
Python