13 Profilozó szoftver az alkalmazás teljesítményével kapcsolatos probléma elhárításához

Alkalmazásának célja, hogy jól szolgálja a végfelhasználókat.

Gyorsnak, érzékenynek, könnyen használhatónak és megbízhatónak kell lennie, az egyéb kívánatos funkciók mellett.

De nem olyan egyszerű a szoftvert úgy karbantartani, hogy továbbra is a legmagasabb szintű teljesítményt nyújtsa.

Ha a kód szükségtelen függvényeket kezd hívni, megbotlik önmagában, hibákat észlel, és extra ciklusokba megy, az eredménytelenséget eredményezhet. Alkalmazása lassúvá válhat, nem válaszol, vagy szabálytalanul viselkedhet.

És ha nem oldja meg ezeket a problémákat, az alkalmazás általános teljesítménye csökken.

Következésképpen ügyfelei ingerültek lehetnek, vagy a gyenge teljesítmény és a lassú sebesség miatt teljesen leállíthatják az alkalmazás használatát. Ez nem csak a hírnevét rontja, hanem a bevétel és a nyereség tekintetében is költséget jelent. Ezért az optimális teljesítmény elérése érdekében a kódot elemezni, felül kell vizsgálni és hibakeresni kell. Ennek gyors módja egy szoftverprofilozó eszköz használata a kódok figyelésére és hibakeresésére, valamint a teljesítménnyel kapcsolatos szűk keresztmetszetek kiküszöbölésére.

Ebből a cikkből megismerheti a szoftverprofilalkotást, és azt, hogy az hogyan segíthet Önnek. Ezután végigvezetem néhány legjobb profilkészítő eszközön, amellyel az alkalmazás hibakeresésére és teljesítményének optimalizálására szolgál.

Mi az a szoftverprofilozás?

A szoftverprofilalkotás egy dinamikus kódelemzés, ahol a program működését a program futása során gyűjtött adatok felhasználásával vizsgálják. Célja, hogy meghatározza a különböző programrészeket, amelyeket optimalizálnia kell az alkalmazás sebességének, válaszkészségének növelése, valamint a memória- és erőforrás-fogyasztás csökkentése érdekében.

A szoftverprofilozó általában méri a függvényhívások időtartamát és gyakoriságát, valamint a programhoz kapcsolódó memóriát vagy időbonyolultságot. Vannak speciális profilozók is, például memóriaprofilozók.

A profilalkotás általában a program forráskódjának műszerezésével történik. A profilkészítők különböző profilalkotási technikákat használhatnak, például műszeres, eseményalapú, statisztikai vagy szimulációs módszereket.

Miért számít a szoftverprofilozás?

Szoftverprofilozásra van szükség egy adott funkcióhoz tartozó erőforrás-használat és végrehajtási idő meghatározásához. Segít optimalizálni a program sebességét, és egyúttal biztosítja, hogy minimális erőforrást emészt fel.

Ezenkívül a CPU-használat és a parancsvégrehajtási idő nyomon követésére és optimalizálására szolgál.

Ezért a megfelelő szoftverprofil-készítő eszköz kiválasztása szükséges annak biztosításához, hogy gyorsabban tudja hibakeresni a teljesítménnyel kapcsolatos problémákat a hatékonyság növelése és a jobb végfelhasználói élmény biztosítása érdekében. Sok profilkészítő részletes jelentéseket és interaktív grafikonokat és vizualizációkat is tartalmaz, amelyek segítenek megtalálni a problémák pontos okát, megkönnyítve azok megoldását.

Íme tehát egy lista a legjobb szoftverprofilozók közül, amelyeket kipróbálhat, és mondja el, mi vált be a legjobban az Ön számára.

py-spy

py-spy kiváló mintavételi profilozó a Python számára. Ez lehetővé teszi, hogy bepillantást nyerjen minden olyan dologba, amellyel a Python-alapú alkalmazás időt tölti.

Ehhez nem kell módosítania a kódokat, vagy teljesen újra kell indítania a programot. A py-spy alacsony rezsiköltséget jelent, és Rustban fejlesztették ki, hogy nagyobb sebességet hajtson végre. Nem úgy készült, hogy ugyanabban a folyamatban működjön, ahol a profilozott python-alapú program fut. Ez azt jelenti, hogy a py-spy rendkívül biztonságos és biztonságosan használható az éles Python-alapú kódokkal szemben.

Az eszköz lehetővé teszi profilok rögzítését, lánggrafikonok létrehozását interaktív SVG-fájlok létrehozásához. Megtekinthet más lehetőségeket is, például a mintavételi gyakoriság módosítását, a natív C-bővítményeket a profilalkotáshoz, az alfolyamatokat, a szálazonosítókat stb. A „top” paranccsal élő nézetet kaphat a programjaiban előforduló funkciókról, és minden python szálhoz megjelenítheti a jelenlegi hívási veremét a „dump” paranccsal.

Támogatja a CPython interpreter minden verzióját, például a 2.3 – 2.7 és a 3.3 – 3.8. A py-spy-t PyPI-ből vagy GitHubból telepítheti.

Piroszkóp

A nyílt forráskódú folyamatos profilkészítő szoftver Piroszkóp percek alatt segít az alkalmazáson belüli teljesítményproblémák hibakeresésében.

Elindíthatja a szervert, amelyet az ügynök követ, függetlenül attól, hogy mit használ, Docker, Linux, vagy Ruby vagy Go dokumentumokat keres, a Pyroscope lefedi Önt. Még ha tíz másodperces vagy tíz hónapos szoftverprofil-adatokra törekszik is, az egyedi tervezésű tárolómotorjuk gyors lekérdezéseket végez.

Nem kell aggódnia az általános költségek vagy az alkalmazások teljesítménye miatt, mivel mintavételezési profilalkotási technológiát használnak, amely nincs hatással a teljesítményre. A Pyroscope hatékonyan tárolja a profilalkotási adatokat; így még akkor is költséghatékony az Ön számára, ha évekig szeretne különböző alkalmazásokból származó profilozási adatokat tárolni.

  Miért jó még mindig a Jegyzettömb a jegyzetelésre?

Működik macOS, Linux és Docker rendszeren, és támogatja a Python, Go és Ruby nyelven írt programokat.

Bubbleprof

Bubbleprof A Clinic.js új és egyedi módszert kínál a Node.js-ben írt szoftver profilalkotására. Buborékos felhasználói felületet használ, amely a szakértőktől a kezdőkig mindenkinek segít meghatározni az alkalmazásban eltöltött aszinkron időt.

Az aszinkronizált műveletek megfigyelésével, csoportosításával, a késések kiszámításával és leképezésével megjeleníti a Node.js folyamatok működését.

A Bubbleprof a műveletek időzítését úgy határozza meg, hogy megvizsgálja a buborékok méretét egy adott műveletcsoporton belül, amely lehet a kódja, egy csomópontmag vagy egy modul. A szomszédos csoportokat is összeüti a rendetlenség csökkentése érdekében.

A műveletek egyik csoportból a másikba történő áthaladásának késleltetésének kiszámításához a Bubbleprof megméri a buborékokat összekötő nyíl hosszát. Ezen kívül a mérési folyamatokban is különböző színeket használ. Ezzel egyidejűleg a belső színes vonalak az aszinkron művelettípusok keverékét jelentik a késleltetés okaként.

Pyinstrument

Optimalizálja Python kódjait ezzel Pyinstrument.

Megmutatja, miért lassú a Python-kód, és segít diagnosztizálni a problémákat, hogy elérje ezt a hihetetlenül gyors teljesítményt.

A Pyinstrument használatához nem kell Python-szkriptet írnia; csak hívja meg a Pyinstrumentot közvetlenül a parancssor segítségével. A szkript normálisan fut, és az eszköz színes összefoglalót ad azokról a területekről, ahol az alkalmazás töltötte az idejét. Egy Python API-val is rendelkezik, amely még egyszerűbbé teszi a folyamatot.

Lehetősége van a webes kérések profilozására a Flaskban és a Djangoban is, amelyekhez részletes dokumentációt vezettek. Itt kérjük, vegye figyelembe, hogy a Pyinstrument statisztikai profilalkotást kínál, amely 1 ms-onként rögzíti a hívási veremeket, ahelyett, hogy a program által végrehajtott összes függvényhívást követné.

Előnyös, mivel a statisztikai profilozók alacsonyabb rezsiköltséggel járnak, mint a nyomkövető profilozók. Mivel a teljes stacket rögzíti, a költséges függvényhívások követése könnyed lesz. Ezen túlmenően a Pyinstrument (alapértelmezés szerint) elrejti a könyvtári kereteket is, lehetővé téve, hogy a teljesítményt befolyásoló alkalmazásokra vagy modulokra összpontosítson.

A teljesítményproblémák hibakeresése könnyebbé válik, mert a Pyinstrument a „falióra” idővel eltöltött időt rögzíti. Az eszköz nyomon követi a program összes idejét a fájlok olvasásához, az adatok letöltéséhez, az adatbázishoz való kommunikációhoz stb.

Xdebug

A kód teljesítményével kapcsolatos problémák javítása és a fejlesztési élmény egy kicsit szórakoztatóbbá tétele érdekében, Xdebug széleskörű profilalkotási és hibakeresési lehetőségekkel rendelkezik.

Valójában egy PHP-bővítmény, amely lehetővé teszi a PHP-alkalmazás szűk keresztmetszete megtalálását, és teljesítményének elemzését külső vizualizációs eszközök segítségével teljesítménygrafikonok létrehozásához.

Az Xdebug részletes kimenetet hoz létre, amely megmutatja az alkalmazás hibához vezető útját, beleértve az adott függvénynek átadott paramétereket is. Ez a hibák nyomon követésére szolgál. Annak érdekében, hogy a fejlesztő világosan megértse a dolgokat, színkódolt információkat generál a strukturált nézetek mellett.

Tartozik hozzá egy távoli hibakereső is, amellyel összekapcsolhatja az Xdebugot egy futó kóddal, IDE-vel vagy böngészővel, hogy megtekinthesse a kódtöréspontokat, és soronként végrehajthassa a kódokat. Egy másik szolgáltatása a kódlefedettség, amely megmutatja, hogy a program kódja mennyit futott le, és segít az egységtesztekben is.

SPX

Egyszerű profilozási bővítmény (SPX) egy PHP-hez tervezett profilozó kiterjesztés. Néhány egyedi tulajdonsággal rendelkezik, amelyek megkülönböztetik a többi profilalkotási bővítménytől. Használata teljesen INGYENES, és csak az Ön infrastruktúrájára korlátozódik, ami azt jelenti, hogy nem áll fenn az adatszivárgás veszélye.

Az SPX egyszerűsége nagyon egyszerűvé teszi a használatát: mindössze egy parancssort vagy környezeti változót kell beállítani a szkript profiljához. Vagy bekapcsolhatja a választógombot egy weboldalon a szkript profilozásához. Ennek eredményeként nem kell manuálisan beállítania a kódot.

Támogatja a futó parancssori szkriptet is – Ctrl-C. Ezen túlmenően ez a folyamat szükségtelenné teszi a parancssori indító vagy a dedikált böngészőbővítmény használatát. Az SPX támogatja a 22 körüli több metrikát, beleértve a különféle idő- és memóriametrikákat, objektumokat, használatban lévő fájlokat, I/O-t stb.

Adatokat gyűjthet anélkül, hogy elhagyná a kontextust. Webes felhasználói felülete lehetővé teszi a profilozás konfigurálását/engedélyezését a jelenleg használt böngészőmunkamenethez, és felsorolja az összes profilozott szkriptrészletet és jelentést. A webes felhasználói felület lehetővé teszi egy konkrét jelentés kiválasztását a mélyebb elemzéshez, és olyan interaktív vizualizációkat is tartalmaz, mint például a Flamegraph, a lapos profil és az idővonal, amely milliós függvényhívásokra méretezhető.

  Hogyan szerezheti be a Vidgo 7 napos ingyenes próbaverzióját

Előtag

Előtag by Stackify egy könnyen telepíthető és könnyű kódprofil, amelyet sok fejlesztő szeret. Segít kiküszöbölni az alkalmazás teljesítményében jelentkező szűk keresztmetszetek optimalizálását és a felhasználói élmény javítását.

Az előtag kiváló nyomkövetési és profilalkotási képességei lehetővé teszik a rejtett kivételek, a lassú SQL-lekérdezések és egyebek gyors megtalálását. Ez biztosítja a fejlesztők számára az APM (alkalmazásteljesítmény-figyelés) valódi erejét. Ehhez a Prefix a kódteljesítményt a megírt módon érvényesíti, és lehetővé teszi, hogy jobban teljesítő kódokat küldjön tesztelésre.

Így kevesebb támogatási jegyet kap termelési oldalról, és segíti a fejlesztési vezetőket a célok gyorsabb elérésében. Fedezze fel az összes alulteljesítő lekérdezést, az ismeretlen szűk keresztmetszeteket és az ORM által generált lekérdezéseket.

Ezenkívül nyomon követheti az egyes SQL-hívási paramétereket, letöltheti az időzítéseket, és megtekintheti az érintett rekordokat. Az előtag egyszerűbbé teszi az N+1 minták felismerését is. Felejtsd el a rendetlen naplók válogatását; hozza őket össze, hogy könnyen megtalálja a problémákat.

Az előtag segítségével közvetlenül megkeresheti a gyanús napló kontextusát a lekérdezési kérésben, és az egyik naplóból egy nyomkövetésre ugorhat a hibakereséshez. Az előtag rávilágít a gyengén teljesítő függőségekre, ami hasznos a rejtett kivételek megtalálásához és a régi kód- vagy keretszakaszokkal való munkavégzéshez. Ezek a függőségek lehetnek webszolgáltatások, harmadik féltől származó szolgáltatások, gyorsítótár-szolgáltatások és mások.

Az előtag Windows és Mac rendszeren működik, és támogatja a .Net, Ruby, Java, PHP, Python és Node.js fájlokat.

Egyenlőtlen oldalú

Egyenlőtlen oldalú egy nagy pontosságú, nagy teljesítményű GPU-, CPU- és memóriaprofilozó Python-alapú programok számára. Számos előnnyel rendelkezik a többi profilkészítőhöz képest, mint például a gyorsabb nagyságrendek futtatása és a mélyebb információszolgáltatás.

A Scalene hihetetlenül gyors, és nem műszerezést, hanem mintavételt használ. Még csak nem is támaszkodik a Python nyomkövetési lehetőségeire. Ezen felül a rezsije általában 10-20% alatt van. Ez az eszköz szoftveres profilalkotást hajt végre a sor szintjén, és rámutat azokra a kódsorokra, amelyek felelősek a program végrehajtási idejéért.

Ezek a részletek értékesebbek, mint a funkciószintű profilalkotásnál. A skála elválasztja a tisztán Pythonban eltöltött időt a könyvtárakat tartalmazó natív kódtól. Mivel a legtöbb Python programozó nem optimalizálja a natív kód teljesítményét, a fejlesztők erőfeszítéseiket a ténylegesen javítható kódok optimalizálására összpontosíthatják.

Pirossal kiemeli a hotspotokat, amelyek megkönnyítik a CPU-idő/memóriakiosztás észlelését, valamint a rendszeridő egyszerű elkülönítését az I/O-problémák megtalálásához. A Scalene képes jelenteni a GPU-időt, profilozhatja a memóriahasználatot, és nyomon követheti a CPU-használatot. A Scalene képes azonosítani a lehetséges memóriaszivárgást, a profilmásolási mennyiséget, és csökkentett profilokat generál a CPU 1%-ánál nagyobb mennyiséget fogyasztó kódsorokhoz.

VisualVM

A minden az egyben hibaelhárító eszköz a Java-hoz, VisualVMA gyártási és fejlesztési szakaszban egyaránt használható. Ez egy vizuális szoftver, amely integrálja a könnyű profilalkotási funkciókat és a parancssori JDK-eszközöket.

A VisualVM figyeli a Java 1.4+ verzión futó alkalmazásokat, és számos technológia, például a JMX, a jvmstat, az Attach API és a Serviceability Agent segítségével elhárítja azokat. Ez az eszköz tökéletesen illeszkedik a minőségügyi mérnökök, rendszergazdák és végfelhasználók különböző követelményeihez.

Automatikusan észleli a távolról és helyben futó Java-alapú alkalmazásokat, és listázza azokat. Az eszköz lehetővé teszi a programok manuális meghatározását is a JMX kapcsolat segítségével. Minden folyamat esetében megjeleníti a tipikus futásidejű adatokat, például a PID-t, az átadott argumentumokat, a JDK kezdőlapját, a főosztályt, a JVM-jelzőket, a JVM-verziót, valamint a rendszer- és argumentumtulajdonságokat.

A VisualVM figyeli a CPU-használatot, a kupacot és a metateret vagy az állandó generálási memóriát, a futó szálakat és a betöltött osztályokat egy alkalmazásban. Az összes futó szálat egy idővonalon jeleníti meg, összesített alvási, futási, parkolási, figyelési és várakozási időkkel.

Mind a műszerezés, mind a mintavételezési profilok végrehajthatók a VisualVM használatával a memóriakezelés és az alkalmazások teljesítménye érdekében. Megjeleníti a szálkiíratásokat, hogy gyors betekintést nyújtson a folyamatokba. Igény szerint megtekinti és létrehozza a .hprof pillanatképeket is, hogy segítsen feltárni a halomhasználati hatékonyságot és a memóriaszivárgásokat.

  Hogyan találhatja meg a hónap egy adott napjának dátumát az Excelben

Ezenkívül a VisualVM beolvassa az összeomlott Java-alapú folyamat alapvető adatait a környezetével együtt. Alkalmazásait offline is elemezheti; mentheti az alkalmazás futtatókörnyezetét és konfigurációját készített kupackiíratással, szálkiíratással és profilalkotási pillanatképekkel, amelyeket egy későbbi szakaszban offline is feldolgozhat.

Windowson, Linuxon és Unixon működik.

Orbit Profiler

Vizualizálja C/C++ alkalmazását, és gyorsan megtalálja a teljesítményproblémákat Orbit Profiler. Ez egy hibakereső eszköz és önálló profilkészítő, amelynek célja, hogy segítse a fejlesztőket az összetett alkalmazás végrehajtási folyamatának megtekintésében és megértésében.

Éles képet ad mindenről, ami az alkalmazáson belül történik, így gyorsan kiküszöbölheti a teljesítmény szűk keresztmetszeteit, és visszaállíthatja az alkalmazás nagy teljesítményét.

Az Orbit Profiler bármely C vagy C++ alkalmazáson hatékonyan tud dolgozni, feltéve, hogy hozzáfér a PDB fájlhoz. Ezután megkezdi a profilalkotást, miután befejezte a program letöltését. Az eszköz a célfolyamathoz ugrik, a kiválasztott funkciókhoz csatlakozik, és profilalkotást végez.

Még az optimalizált végső vagy szállítási összeállításokon is működhet. A dinamikus műszerezés mellett az Orbit Profiler „mindig bekapcsolt” mintavételi képességeket is kínál, amely gyors, állandóan elérhető és robusztus.

Windowson és Linuxon működik.

Uber JVM Profiler

Fejlett profilalkotási lehetőségekkel ellátva, Uber JVM Profiler egy másik jó lehetőség a Java-alapú alkalmazásokhoz.

Java-ügynököt kínál, amely több verem nyomkövetést és metrikát gyűjt a Spark/Hadoop JVM folyamatokhoz elosztott módon, például memória/CPU/IO metrikákat.

Az eszköz képes nyomon követni a java argumentumokat és metódusokat a felhasználói kódokon anélkül, hogy megváltoztatná azokat. Használhatja a HDFS névcsomópontok hívási késésének nyomon követésére is minden Spark-alkalmazásnál, és megtalálhatja a problémákat. Még a Spark alkalmazás HDFS fájlútvonalait is nyomon tudja követni, hogy kiderítse a forró fájlokat, és további optimalizálást hajtson végre.

Az Uber JVM Profiler eredetileg olyan Spark-alkalmazások profilálására jött létre, amelyek általában több gépet vagy folyamatot tartalmaznak egy alkalmazáshoz. Így az emberek könnyen korrelálhatják ezeknek a gépeknek vagy folyamatoknak a mérőszámait.

Az eszköz azonban tipikus java ügynökként működik, és bármelyik JVM-folyamathoz használhatja. Jellemzői a következők:

  • A Spark alkalmazás végrehajtóinak memóriahasználatának hibakeresése, például java kupac memória, natív memória, nem kupac memória, puffertár és memóriatár
  • CPU-használat és szemétgyűjtési idő hibakeresése
  • Java osztály metódusok gyakorisága és ideje vagy időtartamuk profilozásának hibakeresése
  • Argumentum profilozás (java osztály metódushívásának és argumentumértékének hibakeresése és nyomon követése)
  • Stacktrack profilozás és Flamegraph-ok generálása a CPU-időhöz
  • I/O-metrikák és JVM-szál-metrikák hibakeresése

Tracy

Tracy egy hasznos eszköz, amely segít a fejlesztőknek a PHP programok egyszerű hibakeresésében. Barátságos kialakítású és olyan fejlett funkciókkal rendelkezik, mint a CLI támogatás, az AJAX hívások hibakeresése és még sok más.

Gyorsan meg tudja találni és kijavítani a hibákat, kiírja a változókat, naplózza a hibákat, megjeleníti a memóriafelhasználást, és meghatározza a lekérdezések vagy parancsfájlok végrehajtási idejét. A színkódolás és a problémák piros színnel való kiemelése világos magyarázatokkal segíti a kivételek és hibák egyszerű megjelenítését és megértését.

A Tracy naplózási funkcióval és környezeti automatikus felismeréssel rendelkezik. Az adatokat naplófájlokba tárolja, és a szerver hibaüzeneteit jeleníti meg a látogatónak az állásidő alatt. A Tracy integrálható a Drupal 7-tel, az OpenCarttal, a WordPress-szel és még sok mással is.

vprof

vprof egy vizuális profilkészítő Python alkalmazásokhoz. Gazdag, interaktív vizualizációkat biztosít a Python program különböző jellemzőihez, például a memóriahasználathoz és a futási időhöz.

BSD licenc alatt érhető el, és támogatja a Python 3.4 és újabb verzióit.

Következtetés

Az alkalmazások teljesítménye döntő tényező a végfelhasználók elvárásainak teljesítésében. Ha pedig teljesítménybeli problémák lépnek fel, készen kell állnia a probléma diagnosztizálására, mielőtt a végfelhasználói élményt befolyásolná.

Ezért folytassa az alkalmazások optimalizálását, és azonnal javítsa ki a problémákat, hogy továbbra is szupergyors alkalmazásteljesítményt biztosítson a felhasználóknak a cikkben említett eszközök segítségével.

Íme egy gyors összehasonlító táblázat, amely bemutatja a fenti profilozókat és azt, hogy mire használják leginkább.

Név
Nyelvek
py-spy
Piton
Piroszkóp
Python, Ruby, Go
Bubbleprof
Node.js
Pyinstrument
Piton
Xdebug
PHP
SPX
PHP
Előtag
Python, .NET, Java, Node.js, Ruby, PHP
Egyenlőtlen oldalú
Piton
VisualVM
Jáva
Orbit Profiler
C, C++
Uber JVM Profiler
Jáva
Tracy
PHP
vprof
Piton