13 Profilēšanas programmatūra lietojumprogrammas veiktspējas problēmu atkļūdošanai

Jūsu lietojumprogrammas mērķis ir labi apkalpot jūsu galalietotājus.

Tam ir jābūt ātram, atsaucīgam, viegli lietojamam un uzticamam, kā arī citām vēlamajām funkcijām.

Taču programmatūras uzturēšana tādā veidā, kas nepārtraukti nodrošina augstākā līmeņa veiktspēju, nav tik vienkārša.

Kad kods sāk izsaukt nevajadzīgas funkcijas, paklupa sev, uztver kļūdas un nonāk papildu cilpās, tas var izraisīt neefektivitāti. Jūsu lietojumprogramma var kļūt gausa, nereaģēt vai darboties neparasti.

Un, ja šīs problēmas nenovērsīsit, tiek ciesta kopējā lietojumprogrammas veiktspēja.

Līdz ar to jūsu klienti var kļūt aizkaitināti vai vispār pārtraukt lietot jūsu lietojumprogrammu sliktas veiktspējas un lēna ātruma dēļ. Tas ne tikai pasliktina jūsu reputāciju, bet arī maksā jums ieņēmumus un peļņu. Tāpēc kods ir jāanalizē, jāpārskata un jāatkļūdo, lai sasniegtu optimālu veiktspēju. Ātrākais veids, kā to izdarīt, ir izmantot programmatūras profilēšanas rīku, lai pārraudzītu un atkļūdotu kodus un novērstu ar veiktspēju saistītus vājās vietas.

Šajā rakstā jūs uzzināsit par programmatūras profilēšanu un to, kā tā var jums palīdzēt. Pēc tam es iepazīstināšu jūs ar dažiem labākajiem profilēšanas rīkiem, lai atkļūdotu lietojumprogrammu un optimizētu tās veiktspēju.

Kas ir programmatūras profilēšana?

Programmatūras profilēšana ir dinamiska koda analīze, kurā programmas darbība tiek pētīta, izmantojot programmas darbības laikā savāktos datus. Tā mērķis ir noteikt dažādas programmas sadaļas, kuras jums ir jāoptimizē, lai palielinātu lietojumprogrammas ātrumu, reaģētspēju un samazinātu tās atmiņas un resursu patēriņu.

Programmatūras profilētājs parasti mēra funkciju izsaukumu ilgumu un biežumu, kā arī ar programmu saistīto atmiņu vai laika sarežģītību. Ir pieejami arī īpaši profilētāji, piemēram, atmiņas profilētāji.

Profilēšana parasti tiek veikta, instrumentējot programmas pirmkodu. Profilētāji var izmantot dažādas profilēšanas metodes, piemēram, instrumentālas, uz notikumiem balstītas, statistikas vai simulācijas metodes.

Kāpēc programmatūras profilēšanai ir nozīme?

Programmatūras profilēšana ir nepieciešama, lai noteiktu ar konkrētu funkciju saistīto resursu izmantošanu un izpildes laiku. Tas palīdz optimizēt programmas ātrumu un tajā pašā laikā nodrošināt, ka tā patērē minimālus resursus.

Turklāt tas tiek darīts, lai izsekotu un optimizētu CPU izmantošanu un komandu izpildes laiku.

Tāpēc ir jāizvēlas pareizais programmatūras profilēšanas rīks, lai nodrošinātu ar veiktspēju saistīto problēmu ātrāku atkļūdošanu, lai uzlabotu tā efektivitāti un nodrošinātu labāku galalietotāja pieredzi. Daudzi profilētāji piedāvā arī detalizētus pārskatus un interaktīvas diagrammas un vizualizācijas, kas palīdz atrast precīzu problēmu galveno cēloni, atvieglojot to risināšanu.

Tātad, šeit ir saraksts ar dažiem labākajiem programmatūras profilētājiem, kurus varat izmēģināt, un pastāstiet mums, kas jums noderēja vislabāk.

py-spiegs

py-spiegs ir lielisks Python paraugu ņemšanas profilētājs. Tas ļauj jums ieskatīties visās lietās, kurām jūsu Python balstītā lietojumprogramma pavada laiku.

Lai to izdarītu, jums nav jāmaina kodi vai jārestartē programma. py-spy ietver zemas pieskaitāmās izmaksas, un tas ir izstrādāts Rust, lai izpildītu lielāku ātrumu. Tā nav paredzēta darbībai tajā pašā procesā, kurā darbojas jūsu profilētā python programma. Tas nozīmē, ka py-spy ir ļoti drošs lietošanai pret Python bāzes kodiem.

Šis rīks ļauj ierakstīt profilus, ģenerēt liesmas grafikus, lai izveidotu interaktīvus SVG failus. Varat skatīt arī citas opcijas, piemēram, paraugu ņemšanas ātruma maiņu, vietējos C paplašinājumus profilēšanai, apakšprocesus, pavedienu ID un daudz ko citu. Varat iegūt reāllaika skatījumu par funkcijām, kas notiek jūsu programmās, izmantojot komandu “augšējā”, un parādīt pašreizējo zvanu steku, izmantojot komandu “dump” katram python pavedienam.

Tā atbalsta visas CPython tulka versijas, piemēram, 2.3–2.7 un 3.3–3.8. Varat instalēt py-spy no PyPI vai GitHub.

Piroskops

Atvērtā koda nepārtrauktas profilēšanas programmatūra Piroskops palīdz dažu minūšu laikā atkļūdot visas veiktspējas problēmas jūsu lietojumprogrammā.

Varat startēt serveri, kam seko aģents neatkarīgi no tā, ko izmantojat, Docker, Linux vai meklējat Ruby vai Go dokumentus, Pyroscope aptver jūs. Pat ja jūsu mērķis ir desmit sekunžu vai desmit mēnešu programmatūras profilēšanas dati, to īpaši izstrādātais uzglabāšanas dzinējs veic ātrus vaicājumus.

Jums nav jāuztraucas par pieskaitāmajām izmaksām vai lietojumprogrammu veiktspēju, jo tiek izmantota izlases profilēšanas tehnoloģija, kas neietekmē veiktspēju. Piroskops efektīvi saglabā jūsu profilēšanas datus; tādējādi tas ir izdevīgi jums pat tad, ja vēlaties gadiem ilgi glabāt dažādus profilēšanas datus no dažādām lietojumprogrammām.

  8 Proposal Software slēgt darījumus ātrāk pcdream.lt

Tas darbojas operētājsistēmās MacOS, Linux un Docker un atbalsta programmas, kas rakstītas Python, Go un Ruby.

Bubbleprof

Bubbleprof Clinic.js nodrošina jaunu un unikālu veidu, kā profilēt jūsu programmatūru, kas rakstīta Node.js. Tas izmanto “burbuļa” lietotāja interfeisu, kas palīdz ikvienam, sākot no ekspertiem līdz iesācējiem, noteikt asinhrono laiku, kas pavadīts jūsu lietotnē.

Tas vizualizē, kā darbojas jūsu Node.js procesi, novērojot tā asinhronās darbības, grupējot tās, aprēķinot aizkaves un kartējot tās.

Bubbleprof nosaka darbības laikus, aplūkojot burbuļu lielumu noteiktā darbību grupā, kas var būt jūsu kods, mezgla kodols vai modulis. Tas arī apvieno blakus esošās grupas, lai samazinātu jucekli.

Lai aprēķinātu aizkavi, kad darbība plūst no vienas grupas uz otru, Bubbleprof mēra bultiņas garumu, kas savieno burbuļus. Papildus tam mērīšanas procesos tiek izmantotas arī dažādas krāsas. Vienlaikus iekšējās krāsainās līnijas attēlo asinhrono darbību veidu sajaukumu kā aizkaves cēloni.

Pyinstrument

Optimizējiet savus Python kodus ar Pyinstrument.

Tas parāda, kāpēc jūsu Python kods ir lēns, un palīdz diagnosticēt problēmas, lai jūs varētu nodrošināt tik ļoti ātru veiktspēju.

Lai izmantotu Pyinstrument, jums nav jāraksta Python skripts; vienkārši izsauciet Pyinstrument, izmantojot komandrindu tieši. Jūsu skripts darbotos normāli, un rīks sniegs krāsainu kopsavilkumu par apgabaliem, kuros lietojumprogramma pavadīja savu laiku. Tam ir arī Python API, kas padara procesu vēl vienkāršāku.

Jums ir iespēja profilēt tīmekļa pieprasījumus arī Flask un Django, par ko viņi ir uzturējuši detalizētu dokumentāciju. Šeit, lūdzu, ņemiet vērā, ka Pyinstrument piedāvā statistisko profilēšanu, kas ieraksta zvanu steku ik pēc 1 ms, nevis izseko katru jūsu programmas veikto funkciju zvanu.

Tas ir izdevīgi, jo statistikas profilētājiem ir mazākas pieskaitāmās izmaksas, salīdzinot ar profilēšanas izsekošanas veidotājiem. Tā kā tas ieraksta visu kaudzi, dārgu funkciju zvanu izsekošana kļūst bez piepūles. Papildus tam Pyinstrument arī slēpj (pēc noklusējuma) bibliotēkas rāmjus, ļaujot jums koncentrēties uz lietojumprogrammām vai moduļiem, kas ir atbildīgi par veiktspējas ietekmēšanu.

Veiktspējas problēmu atkļūdošana ir vienkāršāka, jo Pyinstrument reģistrē laiku, kas pavadīts, izmantojot “sienas pulksteņa” laiku. Šis rīks izseko visu programmas laiku, lai lasītu failus, lejupielādētu datus, sazinātos ar datu bāzi utt.

Xdebug

Lai uzlabotu koda veiktspējas problēmas un padarītu izstrādes pieredzi nedaudz jautrāku, Xdebug ir aprīkots ar plašām profilēšanas un atkļūdošanas iespējām.

Tas faktiski ir PHP paplašinājums, kas ļauj jums atrast vājās vietas jūsu PHP lietojumprogrammā un analizēt tās veiktspēju, izmantojot ārējos vizualizācijas rīkus, lai ģenerētu veiktspējas grafikus.

Xdebug izveido detalizētu izvadi, kas parāda lietojumprogrammas ceļu līdz kļūdas sasniegšanai, tostarp parametrus, ko tā nodeva noteiktai funkcijai. Tas tiek darīts, lai izsekotu kļūdām. Lai palīdzētu izstrādātājam skaidri saprast lietas, tas ģenerē ar krāsu kodētu informāciju kopā ar strukturētiem skatiem.

Tam ir arī attālais atkļūdotājs, ko varat izmantot, lai savienotu Xdebug ar darbojošos kodu, IDE vai pārlūkprogrammu, lai redzētu koda pārtraukuma punktus un izpildītu kodus pēc rindas. Vēl viena tā piedāvātā funkcija ir koda pārklājums, kas parāda, cik daudz jūsu programmas koda tika izpildīts, kā arī palīdz veikt vienību testus.

SPX

Vienkāršs profilēšanas paplašinājums (SPX) ir profilēšanas paplašinājums, kas paredzēts PHP. Tam ir dažas unikālas īpašības, kas to atšķir no citiem profilēšanas paplašinājumiem. Tas ir pilnīgi BEZMAKSAS lietojams un attiecas tikai uz jūsu infrastruktūru, kas nozīmē, ka nepastāv datu noplūdes risks.

SPX vienkāršība padara to ļoti vienkāršu: viss, kas jums nepieciešams, ir iestatīt komandrindu vai vides mainīgo, lai profilētu skriptu. Vai arī varat ieslēgt radio pogu tīmekļa lapā, lai profilētu skriptu. Tā rezultātā jums nav manuāli jāinstrumentē kods.

Tas atbalsta arī darbināmu komandrindas skriptu – Ctrl-C. Turklāt šis process novērš nepieciešamību izmantot komandrindas palaišanas programmu vai īpašu pārlūkprogrammas paplašinājumu. SPX atbalsta vairākus aptuveni 22 rādītājus, tostarp dažādus laika un atmiņas rādītājus, objektus, izmantotos failus, I/O utt.

Tas var apkopot datus, neizejot no konteksta. Tā tīmekļa lietotāja saskarne ļauj konfigurēt/iespējot profilēšanu pašlaik izmantotajai pārlūkprogrammas sesijai, un tajā ir uzskaitīta visa profilētā skripta informācija un atskaites. Tīmekļa lietotāja interfeiss ļauj atlasīt konkrētu pārskatu padziļinātai analīzei, un tajā ir dažas interaktīvas vizualizācijas, piemēram, Flamegraph, plakans profils un laika skala, kas var tikt mērogota līdz funkciju izsaukumiem miljonos.

  Ko nozīmē “YMMV” un kā jūs to lietojat?

Priedēklis

Priedēklis by Stackify ir viegli instalējams un viegls kodu profilētājs, kas patīk daudziem izstrādātājiem. Tas palīdz novērst lietojumprogrammas veiktspējas vājās vietas, lai to optimizētu un uzlabotu lietotāja pieredzi.

Prefiksa izcilās izsekošanas un profilēšanas iespējas ļauj ātri atrast slēptos izņēmumus, lēnus SQL vaicājumus un daudz ko citu. Tas nodrošina jūsu izstrādātājiem patieso APM (lietojumprogrammu veiktspējas uzraudzības) jaudu. Šim nolūkam prefikss apstiprina koda veiktspēju tā, kā tas ir rakstīts, un ļauj pārbaudīt labākas veiktspējas kodus.

Tādā veidā tas saņem mazāk atbalsta biļešu no ražošanas puses un palīdz attīstības vadītājiem ātrāk sasniegt mērķus. Atklājiet visus neefektīvos vaicājumus, nezināmos vājos punktus un ORM ģenerētos vaicājumus.

Varat arī izsekot katram SQL izsaukuma parametram, lejupielādēt laikus un skatīt ietekmētos ierakstus. Prefikss ļauj vienkāršāk pamanīt arī N+1 modeļus. Aizmirstiet par visu šo netīro žurnālu šķirošanu; apvienojiet tos, lai viegli atrastu problēmas.

Prefikss ļauj tieši vaicājuma pieprasījumā atrast aizdomīga žurnāla kontekstu un pāriet no viena žurnāla uz izsekošanu, lai bez piepūles atkļūdotu. Prefikss izgaismo sliktas veiktspējas atkarības, kas ir noderīgas, lai atrastu slēptos izņēmumus un strādātu ar mantotā koda vai ietvara sadaļām. Šīs atkarības var būt tīmekļa pakalpojumi, trešo pušu pakalpojumi, kešatmiņas pakalpojumi un citi.

Prefikss darbojas operētājsistēmās Windows un Mac un atbalsta .Net, Ruby, Java, PHP, Python un Node.js.

Skalēns

Skalēns ir augstas precizitātes, augstas veiktspējas GPU, CPU un atmiņas profilētājs Python programmām. Tas piedāvā vairākas priekšrocības salīdzinājumā ar citiem profilētājiem, piemēram, ātrāku pasūtījumu izpildi un padziļinātas informācijas piegādi.

Scalene ir neticami ātrs un izmanto paraugu ņemšanu, nevis instrumentus. Tas pat nepaļaujas uz Python izsekošanas iespējām. Turklāt tā pieskaitāmās izmaksas parasti ir zem 10-20%. Šis rīks veic programmatūras profilēšanu līnijas līmenī un norāda uz tām kodu rindām, kas ir atbildīgas par jūsu programmas izpildes laiku.

Šīs detaļas ir vērtīgākas nekā funkcijas līmeņa profilēšanas dati. Mērogs atdala tikai Python pavadīto laiku no vietējā koda, kas ietver bibliotēkas, laika. Tā kā lielākā daļa Python programmētāju neoptimizēs vietējā koda veiktspēju, izstrādātāji var koncentrēt savus centienus uz tādu kodu optimizēšanu, kurus jūs faktiski varat uzlabot.

Tas izceļ karstos punktus sarkanā krāsā, kas ļauj vieglāk noteikt CPU laika/atmiņas sadalījumu un viegli atdalīt sistēmas laiku, lai atrastu I/O problēmas. Scalene var ziņot par GPU laiku, profilēt atmiņas lietojumu un izsekot CPU lietojumu. Scalene var arī identificēt iespējamās atmiņas noplūdes, profilu kopēšanas apjomu un ģenerēt samazinātus profilus koda rindām, kas patērē vairāk nekā 1% CPU.

VisualVM

Viss vienā problēmu novēršanas rīks Java, VisualVM, ir paredzēts izmantošanai gan ražošanas, gan izstrādes fāzēs. Tā ir vizuāla programmatūra, kas integrē vieglas profilēšanas funkcijas un komandrindas JDK rīkus.

VisualVM uzrauga lietojumprogrammas, kas darbojas ar Java 1.4+, un novērš tās, izmantojot vairākas tehnoloģijas, piemēram, JMX, jvmstat, Attach API un Serviceability Agent. Šis rīks ir lieliski piemērots dažādām kvalitātes inženieru, sistēmas administratoru un galalietotāju prasībām.

Tā automātiski nosaka attālināti un lokāli darbojošās Java lietojumprogrammas un uzskaita tās. Šis rīks arī ļauj manuāli definēt programmas, izmantojot JMX savienojumu. Katram procesam tas parāda tipiskus izpildlaika datus, piemēram, PID, nodotos argumentus, JDK sākumlapu, galveno klasi, JVM karogus, JVM versiju un sistēmas un argumentu rekvizītus.

VisualVM uzrauga CPU lietojumu, kaudzi un metatelpu vai pastāvīgo ģenerēšanas atmiņu, palaist pavedienus un ielādētās klases lietojumprogrammā. Tas parāda visus darbojošos pavedienus laika skalā ar apkopotiem miega, skriešanas, stāvēšanas, uzraudzības un gaidīšanas laikiem.

Gan instrumentu, gan paraugu ņemšanas profilētājus var veikt, izmantojot VisualVM atmiņas pārvaldībai un lietojumprogrammu veiktspējai. Tas parāda pavedienu izgāztuves, lai nodrošinātu ātru ieskatu procesos. Tas arī pēc pieprasījuma skatās un izveido .hprof momentuzņēmumus, lai palīdzētu atklāt kaudzes lietošanas neefektivitāti un atkļūdot atmiņas noplūdes.

  10 labākās lietotnes/spēles, lai piesaistītu savu kaķi

Turklāt VisualVM var nolasīt pamatdatus par avarējušu Java procesu, kā arī tā vidi. Varat analizēt savas lietotnes bezsaistē; tas var saglabāt lietotnes izpildlaika vidi un konfigurāciju, izmantojot uzņemtās kaudzes izgāztuves, pavedienu izgāztuves un profilēšanas momentuzņēmumus, ko vēlāk varat apstrādāt bezsaistē.

Tas darbojas operētājsistēmās Windows, Linux un Unix.

Orbītas profilētājs

Vizualizējiet savu C/C++ lietojumprogrammu un ātri atrodiet veiktspējas problēmas, izmantojot Orbītas profilētājs. Šis ir atkļūdošanas rīks un atsevišķs profilētājs, kura mērķis ir palīdzēt izstrādātājiem skatīt un izprast sarežģītās lietotnes izpildes plūsmu.

Tas nodrošina asu skatu uz visu, kas notiek lietotnē, lai jūs varētu ātri novērst veiktspējas vājās vietas un atjaunot lietojumprogrammas augsto veiktspēju.

Orbit Profiler var efektīvi strādāt ar jebkuru C vai C++ lietotni, ja tā var piekļūt PDB failam. Pēc tam tas sāks profilēšanu, tiklīdz būsiet pabeidzis programmas lejupielādi. Rīks pāriet uz mērķa procesu, pieslēdzas atlasītajām funkcijām un veic profilēšanu.

Tas var darboties pat jūsu optimizētajās galīgajās vai piegādes versijās. Papildus dinamiskajai instrumentācijai Orbit Profiler piedāvā arī “vienmēr ieslēgtas” paraugu ņemšanas iespējas, kas ir ātras, pieejamas visu laiku un izturīgas.

Tas darbojas operētājsistēmās Windows un Linux.

Uber JVM profilētājs

Aprīkots ar uzlabotām profilēšanas iespējām, Uber JVM profilētājs ir vēl viena laba iespēja jūsu Java lietojumprogrammām.

Tas piedāvā Java aģentu, kas sadalītā veidā apkopo vairākas steka trases un metriku Spark/Hadoop JVM procesiem, piemēram, atmiņas/CPU/IO metriku.

Šis rīks var izsekot java argumentiem un metodēm lietotāju kodos, tos nemainot. Varat arī izmantot to, lai izsekotu HDFS nosaukumu mezglu zvanu latentumam katrai Spark lietotnei un atrastu problēmas. Tas pat var izsekot lietotnes Spark HDFS failu ceļiem, lai uzzinātu karstos failus un veiktu turpmāku optimizāciju.

Uber JVM Profiler sākotnēji tika izveidots, lai profilētu Spark lietotnes, kas parasti ietver daudzas mašīnas vai procesus vienai lietojumprogrammai. Tādējādi cilvēki var viegli korelēt šo iekārtu vai procesu metriku.

Tomēr rīks darbojas kā tipisks Java aģents, un jūs varat to izmantot jebkuram JVM procesam. Tās funkcijas ietver:

  • Spark lietotņu izpildītāju atmiņas lietojuma atkļūdošana, piemēram, java kaudzes atmiņa, vietējā atmiņa, atmiņa, kas nav kaudzes atmiņa, bufera baseins un atmiņas kopums
  • CPU lietojuma atkļūdošana un atkritumu savākšanas laiks
  • Java klases metožu atkļūdošana pēc to biežuma un laika vai ilguma profilēšana
  • Argumentu profilēšana (java klases metodes izsaukuma atkļūdošana un izsekošana un tā argumenta vērtība)
  • Stacktrack profilēšana un Flamegraphs ģenerēšana CPU laikam
  • I/O metrikas un JVM pavedienu metrikas atkļūdošana

Treisija

Treisija ir noderīgs rīks, kas palīdz izstrādātājiem viegli atkļūdot PHP programmas. Tam ir draudzīgs dizains un uzlabotas funkcijas, piemēram, CLI atbalsts, AJAX zvanu atkļūdošana un citas.

Tas var ātri atrast un labot kļūdas, izmest mainīgos, reģistrēt kļūdas, vizualizēt atmiņas patēriņu un noteikt vaicājumu vai skriptu izpildes laiku. Izmantojot krāsu kodēšanu un izceļot problēmas sarkanā krāsā ar skaidriem paskaidrojumiem, varat viegli vizualizēt izņēmumus un kļūdas un tos saprast.

Tracy ir aprīkota ar reģistrēšanas funkcionalitāti un vides automātisko noteikšanu. Tas saglabā datus žurnālfailos un dīkstāves laikā apmeklētājam parāda servera kļūdu ziņojumus. Tracy var arī integrēties ar Drupal 7, OpenCart, WordPress un citām.

vprof

vprof ir Python lietojumprogrammu vizuālais profilētājs. Tas nodrošina bagātīgas, interaktīvas vizualizācijas jūsu Python programmas dažādajām īpašībām, piemēram, atmiņas lietojumam un darbības laikam.

Tas ir pieejams ar BSD licenci un atbalsta Python 3.4 un jaunākas versijas.

Secinājums

Lietojumprogrammu veiktspēja ir izšķirošs faktors, lai izpildītu galalietotāju cerības. Un, ja rodas veiktspējas problēmas, jums jābūt gatavam diagnosticēt problēmu, pirms ietekmēt galalietotāja pieredzi.

Tāpēc turpiniet optimizēt savas lietojumprogrammas un nekavējoties novērsiet problēmas, lai lietotājiem turpinātu nodrošināt īpaši ātru lietojumprogrammu veiktspēju, izmantojot šajā rakstā minētos rīkus.

Šeit ir ātra salīdzināšanas tabula, kurā parādīti iepriekš minētie profilētāji un to izmantošanas mērķi.

Vārds
Valodas
py-spiegs
Python
Piroskops
Python, Ruby, Go
Bubbleprof
Node.js
Pyinstrument
Python
Xdebug
PHP
SPX
PHP
Priedēklis
Python, .NET, Java, Node.js, Ruby, PHP
Skalēns
Python
VisualVM
Java
Orbītas profilētājs
C, C++
Uber JVM profilētājs
Java
Treisija
PHP
vprof
Python