etechblog

13 Problém s profilovacím softwarem pro ladění výkonu aplikace

Účelem vaší aplikace je dobře sloužit vašim koncovým uživatelům.

Kromě jiných požadovaných funkcí musí být rychlý, citlivý, snadno použitelný a spolehlivý.

Ale udržovat váš software způsobem, který neustále poskytuje špičkový výkon, není tak snadné.

Když váš kód začne volat zbytečné funkce, zakopne o sebe, zachytí chyby a přejde do dalších smyček, může to vést k neefektivitě. Vaše aplikace by mohla být pomalá, nereagovat nebo se chovat nevyzpytatelně.

A pokud tyto problémy nevyřešíte, utrpí celkový výkon aplikace.

V důsledku toho mohou být vaši zákazníci podrážděni nebo mohou vaši aplikaci úplně přestat používat kvůli nízkému výkonu a pomalé rychlosti. Nejenže to zhoršuje vaši pověst, ale také vás to stojí z hlediska příjmů a zisků. Váš kód proto potřebuje analyzovat, kontrolovat a ladit, abyste dosáhli optimálního výkonu. A rychlý způsob, jak to udělat, je použít nástroj pro softwarové profilování ke sledování a ladění vašich kódů a odstranění úzkých míst souvisejících s výkonem.

V tomto článku se dozvíte o softwarovém profilování a o tom, jak vám může pomoci. A pak vás provedu některými z nejlepších profilovacích nástrojů k ladění vaší aplikace a optimalizaci jejího výkonu.

Co je softwarové profilování?

Softwarové profilování je dynamická analýza kódu, kde se chování programu zkoumá pomocí dat shromážděných během běhu programu. Jeho cílem je určit různé části programu, které musíte optimalizovat, abyste zvýšili rychlost aplikace, odezvu a snížili spotřebu paměti a zdrojů.

Softwarový profilovač běžně měří trvání a frekvenci volání funkcí spolu s pamětí nebo časovou složitostí spojenou s programem. K dispozici jsou také specifické profilovače, například paměťové profily.

Profilování se obecně provádí instrumentací zdrojového kódu programu. Profilátoři mohou používat různé techniky profilování, jako jsou instrumentované, na událostech založené, statistické nebo simulační metody.

Proč na softwarovém profilování záleží?

Softwarové profilování je potřebné k určení využití zdrojů a doby provádění spojené s konkrétní funkcí. Pomáhá optimalizovat rychlost programu a zároveň zajišťuje, že spotřebovává minimální zdroje.

Kromě toho se provádí za účelem sledování a optimalizace využití procesoru a doby provádění příkazů.

Výběr správného nástroje pro profilování softwaru je proto nezbytný, aby bylo zajištěno rychlejší ladění problémů souvisejících s výkonem, aby se zlepšila jeho efektivita a poskytovala lepší zkušenost koncovým uživatelům. Mnoho profilerů také přichází s podrobnými zprávami a interaktivními grafy a vizualizacemi, které vám pomohou najít přesnou hlavní příčinu problémů a usnadňují jejich řešení.

Zde je tedy seznam některých nejlepších softwarových profilovačů, které můžete vyzkoušet, a řekněte nám, co se vám nejvíce osvědčilo.

py-špion

py-špion je vynikající vzorkovací profil pro Python. To vám umožní nahlédnout do všeho, čím vaše aplikace založená na Pythonu tráví čas.

Za tímto účelem nemusíte upravovat své kódy nebo restartovat program úplně. py-spy zahrnuje nízkou režii a je vyvinut v Rustu, aby vykonával vyšší rychlost. Není sestaven tak, aby fungoval ve stejném procesu, kde běží váš profilovaný program založený na pythonu. To znamená, že py-spy je vysoce bezpečný a bezpečný pro použití proti produkčním kódům založeným na Pythonu.

Tento nástroj vám umožňuje zaznamenávat profily, generovat grafy plamenů a vytvářet interaktivní soubory SVG. Můžete si také zobrazit další možnosti, jako je změna vzorkovací frekvence, nativní rozšíření C pro profilování, podprocesy, ID vláken a další. Pomocí příkazu ‚top‘ můžete získat živý pohled na funkce probíhající ve vašich programech a zobrazit aktuální zásobník volání pomocí příkazu ‚dump‘ pro každé vlákno pythonu.

Podporuje všechny verze interpretu CPython, například 2.3 – 2.7 a 3.3 – 3.8. Můžete nainstalovat py-spy z PyPI nebo GitHub.

Pyroskop

Software pro nepřetržité profilování s otevřeným zdrojovým kódem Pyroskop vám pomůže odladit všechny problémy s výkonem ve vaší aplikaci během několika minut.

Můžete spustit server následovaný agentem bez ohledu na to, co používáte, Docker, Linux nebo hledáte dokumenty Ruby nebo Go, Pyroscope vás pokryje. I když se zaměříte na deset sekund nebo deset měsíců dat softwarového profilování, jejich vlastní úložný modul vytvoří rychlé dotazy.

  Jak automaticky opravit pokřivené fotografie iPhone

Nemusíte se starat o režii nebo výkon aplikací, protože používají technologii vzorkování profilování, která neovlivňuje výkon. Pyroscope efektivně ukládá vaše profilovací data; proto je pro vás nákladově efektivní, i když chcete roky ukládat různá profilovací data z různých aplikací.

Funguje na macOS, Linuxu a Dockeru a podporuje programy napsané v Pythonu, Go a Ruby.

Bubbleprof

Bubbleprof od Clinic.js poskytuje nový a jedinečný způsob profilování vašeho softwaru napsaného v Node.js. Využívá „bublinové“ uživatelské rozhraní, které pomáhá každému od odborníků po začátečníky určit asynchronní čas strávený ve vaší aplikaci.

Vizualizuje, jak vaše procesy Node.js fungují, pozorováním jejich asynchronizovaných operací, jejich seskupováním, výpočtem zpoždění a jejich mapováním.

Bubbleprof určuje časování operací podle velikosti bublin v rámci konkrétní skupiny operací, kterými může být váš kód, jádro uzlu nebo modul. Také spojuje sousední skupiny, aby se snížil nepořádek.

Aby bylo možné vypočítat zpoždění, když operace přechází z jedné skupiny do druhé, změří Bubbleprof délku šipky, která spojuje bubliny. Kromě toho používá v procesech měření také různé barvy. Současně vnitřní barevné čáry představují směs typů asynchronních operací jako příčinu zpoždění.

Pyinstrument

Optimalizujte své Python kódy pomocí Pyinstrument.

Ukáže vám, proč je váš kód v Pythonu pomalý, a pomůže vám diagnostikovat problémy, abyste mohli mít tak bleskově rychlý výkon.

Chcete-li používat Pyinstrument, nemusíte psát skript Python; stačí zavolat Pyinstrument přímo pomocí příkazového řádku. Váš skript by běžel normálně a nástroj by poskytl barevný souhrn oblastí, kde aplikace trávila čas. Dodává se také s Python API, které celý proces ještě usnadňuje.

Máte možnost profilovat webové požadavky také ve Flask a Django, pro které mají vedenou podrobnou dokumentaci. Zde si prosím uvědomte, že Pyinstrument nabízí statistické profilování, které zaznamenává zásobník volání každou 1 ms namísto sledování každého volání funkce provedeného vaším programem.

Je to výhodné, protože statistické profilovače zahrnují nižší režii ve srovnání s profilovacími profily pro sledování. Vzhledem k tomu, že zaznamenává celý zásobník, je sledování volání drahých funkcí snadné. Kromě toho Pyinstrument také skrývá (ve výchozím nastavení) rámce knihoven, což vám umožňuje soustředit se na aplikace nebo moduly odpovědné za ovlivňování výkonu.

Ladění problémů s výkonem je jednodušší, protože Pyinstrument zaznamenává čas strávený pomocí času „nástěnných hodin“. Nástroj sleduje veškerý čas programu na čtení souborů, stahování dat, komunikaci s databází atd.

Xdebug

Chcete-li zlepšit problémy s výkonem kódu a učinit váš vývoj o něco zábavnějším, Xdebug přichází s širokými možnostmi profilování a ladění.

Je to vlastně rozšíření PHP, které vám umožňuje najít úzká místa ve vaší aplikaci PHP a analyzovat její výkon pomocí externích vizualizačních nástrojů pro generování grafů výkonu.

Xdebug vytváří podrobný výstup zobrazující cestu aplikace k dosažení chyby, včetně parametrů, které předala dané funkci. To se provádí za účelem sledování chyb. Aby vývojář věci jasně pochopil, generuje barevně odlišené informace spolu se strukturovanými pohledy.

Dodává se také se vzdáleným debuggerem, který můžete použít k propojení Xdebug s běžícím kódem, IDE nebo prohlížečem, abyste viděli zarážky kódu a spouštěli kódy řádek po řádku. Další funkcí, kterou nabízí, je pokrytí kódu, které ukazuje, jak moc byl kód vašeho programu vykonán, a také vám pomůže s testy jednotek.

SPX

Simple Profiling eXtension (SPX) je profilovací rozšíření navržené pro PHP. Má některé jedinečné vlastnosti, kterými se odlišuje od ostatních profilovacích rozšíření. Použití je zcela ZDARMA a je omezeno pouze na vaši infrastrukturu, což znamená, že nehrozí žádné úniky dat.

Jednoduchost SPX umožňuje velmi snadné použití: vše, co potřebujete, je nastavit příkazový řádek nebo proměnnou prostředí pro profilování skriptu. Nebo můžete také zapnout přepínač na webové stránce pro profilování skriptu. V důsledku toho nemusíte svůj kód upravovat ručně.

Podporuje také spuštěný skript příkazového řádku – Ctrl-C. Kromě toho tento proces také eliminuje potřebu použití spouštěče příkazového řádku nebo vyhrazeného rozšíření prohlížeče. SPX podporuje více metrik kolem 22, včetně různých časových a paměťových metrik, objektů, používaných souborů, I/O atd.

  Jak se předběžně zaregistrovat pro Tekken Mobile

Může shromažďovat data, aniž by opustil kontext. Jeho webové uživatelské rozhraní umožňuje konfigurovat/povolit profilování pro aktuálně používanou relaci prohlížeče a uvádí všechny podrobnosti a sestavy profilovaného skriptu. Webové uživatelské rozhraní vám umožňuje vybrat konkrétní sestavu pro hlubší analýzu a obsahuje některé interaktivní vizualizace, jako je Flamegraph, plochý profil a časová osa, které lze škálovat na volání funkcí v milionech.

Předpona

Předpona od Stackify je snadno instalovatelný a lehký kódový profiler, který mnoho vývojářů miluje. Pomáhá vám odstranit úzká místa ve výkonu vaší aplikace, optimalizovat ji a zlepšit uživatelskou zkušenost.

Vynikající možnosti trasování a profilování Prefixu vám umožní rychle najít skryté výjimky, pomalé SQL dotazy a další. Poskytuje vašim vývojářům skutečnou sílu APM (monitorování výkonu aplikací). Za tímto účelem Prefix ověřuje výkon kódu tak, jak je napsán, a umožňuje vám testovat výkonnější kódy.

Získává tak méně lístků na podporu ze strany produkce a pomáhá vývojovým manažerům dosáhnout cílů dříve. Objevte všechny dotazy s nedostatečným výkonem, neznámá úzká místa a dotazy generované ORM.

Můžete také sledovat každý parametr volání SQL, stáhnout časování a zobrazit dotčené záznamy. Předpona také usnadňuje rozpoznání N+1 vzorů. Zapomeňte na třídění všech těch chaotických protokolů; spojte je, abyste snadno našli problémy.

Předpona vám umožňuje přímo najít kontext podezřelého protokolu v požadavku na dotaz a přejít z jednoho protokolu do trasování pro snadné ladění. Prefix vrhá světlo na nevýkonné závislosti, což je užitečné pro hledání skrytých výjimek a práci se staršími sekcemi kódu nebo frameworku. Tyto závislosti mohou být webové služby, služby třetích stran, služby mezipaměti a další.

Prefix funguje na Windows a Mac a podporuje .Net, Ruby, Java, PHP, Python a Node.js.

Scalene

Scalene je vysoce přesný, vysoce výkonný GPU, CPU a paměťový profiler pro programy založené na Pythonu. Oproti jiným profilovačům nabízí několik výhod, jako je rychlejší zpracování objednávek a poskytování podrobnějších informací.

Scalene je neuvěřitelně rychlý a využívá spíše vzorkování než instrumentaci. Nespoléhá se ani na sledovací zařízení Pythonu. Kromě toho je jeho režie obvykle pod 10-20%. Tento nástroj provádí softwarové profilování na úrovni řádků a ukazuje na řádky kódů odpovědné za dobu provádění vašeho programu.

Tyto detaily jsou cennější než ty u profilování na úrovni funkcí. Scalene odděluje čas strávený čistě v Pythonu od času nativního kódu, který zahrnuje knihovny. Protože většina programátorů Pythonu nebude optimalizovat výkon nativního kódu, mohou vývojáři zaměřit své úsilí na optimalizaci kódů, které můžete skutečně zlepšit.

Zvýrazňuje aktivní body červeně, což vám usnadňuje rozpoznání alokace času CPU/paměti a snadné oddělení systémového času pro nalezení problémů s I/O. Scalene může hlásit čas GPU, profiluje využití paměti a sleduje využití CPU. Scalene může také identifikovat možné úniky paměti, objem kopírování profilů a generovat omezené profily pro kódové řádky spotřebovávající více než 1 % CPU.

VisualVM

Všestranný nástroj pro odstraňování problémů pro Javu, VisualVM, je navržen pro použití ve fázi výroby i vývoje. Jedná se o vizuální software, který integruje odlehčené funkce profilování a nástroje JDK příkazového řádku.

VisualVM monitoruje aplikace, které běží na Javě 1.4+, a řeší s nimi problémy pomocí několika technologií, jako je JMX, jvmstat, Attach API a Serviceability Agent. Tento nástroj se perfektně hodí pro různé požadavky inženýrů kvality, systémových administrátorů a koncových uživatelů.

Automaticky detekuje vzdáleně a lokálně spuštěné aplikace založené na Javě a uvádí je. Nástroj také umožňuje definovat programy ručně pomocí připojení JMX. Pro každý proces zobrazuje typická data runtime, jako je PID, předané argumenty, domovská stránka JDK, hlavní třída, příznaky JVM, verze JVM a vlastnosti systému a argumentů.

VisualVM monitoruje využití procesoru, haldu a metaprostor nebo paměť trvalého generování, spouštění vláken a načtené třídy v aplikaci. Zobrazuje všechna běžící vlákna na časové ose s agregovanými dobami spánku, běhu, parkování, sledování a čekání.

Jak instrumentaci, tak vzorkovací profilery lze provádět pomocí VisualVM pro správu paměti a výkon aplikací. Zobrazuje výpisy vláken a poskytuje rychlý přehled o procesech. Na vyžádání také zobrazuje a vytváří snímky .hprof, které vám pomohou odhalit neefektivnost využití haldy a ladit úniky paměti.

  Pozor: Tento podvod Verizon Smishing je šíleně realistický

Kromě toho dokáže VisualVM číst základní data o havarovaném procesu založeném na Javě spolu s jeho prostředím. Své aplikace můžete analyzovat offline; může ušetřit běhové prostředí a konfiguraci aplikace pomocí pořízených výpisů haldy, výpisů vláken a profilových snímků, které můžete později zpracovat offline.

Funguje na Windows, Linux a Unix.

Orbit Profiler

Vizualizujte svou aplikaci C/C++ a rychle pomocí ní najděte problémy s výkonem Orbit Profiler. Jedná se o ladicí nástroj a samostatný profiler, jehož cílem je pomoci vývojářům zobrazit a pochopit tok provádění složité aplikace.

Poskytuje ostrý pohled na vše, co se děje uvnitř aplikace, takže můžete rychle odstranit překážky výkonu a obnovit vysoký výkon aplikace.

Orbit Profiler může efektivně pracovat s jakoukoli aplikací C nebo C++ za předpokladu, že má přístup k souboru PDB. Poté se začne profilovat, jakmile dokončíte stahování jeho programu. Nástroj skočí na cílový proces, připojí se k vybraným funkcím a provede profilování.

Může dokonce fungovat na vašich optimalizovaných konečných nebo expedičních sestavách. Kromě dynamické instrumentace nabízí Orbit Profiler také „vždy zapnuté“ možnosti vzorkování, které je rychlé, neustále dostupné a robustní.

Funguje na Windows i Linuxu.

Uber JVM Profiler

Přichyceno pokročilými možnostmi profilování, Uber JVM Profiler je další dobrou volbou pro vaše aplikace založené na Java.

Nabízí Java Agent, který shromažďuje několik trasování zásobníku a metriky pro procesy Spark/Hadoop JVM distribuovaným způsobem, například metriky paměti/CPU/IO.

Nástroj dokáže sledovat java argumenty a metody na uživatelských kódech, aniž by je měnil. Můžete jej také použít ke sledování latence volání názvových uzlů HDFS pro všechny aplikace Spark a hledání problémů. Dokáže dokonce sledovat cesty k souborům HDFS aplikace Spark, aby zjistil horké soubory a provedl další optimalizaci.

Uber JVM Profiler byl původně vytvořen k profilování aplikací Spark, které obecně zahrnují mnoho strojů nebo procesů pro jednu aplikaci. Lidé tak mohou snadno korelovat metriky pro tyto stroje nebo procesy.

Nástroj však funguje jako typický Java Agent a můžete jej použít pro jakýkoli z vašich procesů JVM. Mezi jeho vlastnosti patří:

  • Ladění využití paměti spouštěči aplikací Spark, jako je paměť haldy java, nativní paměť, paměť bez haldy, fond vyrovnávací paměti a fond paměti
  • Ladění využití CPU a čas sběru odpadu
  • Ladění metod třídy Java pro jejich frekvenci a čas nebo profilování trvání
  • Profilování argumentů (ladění a sledování volání metody Java třídy a její hodnoty argumentu)
  • Stacktrack Profilování a generování plamenových grafů pro čas CPU
  • Ladění I/O metrik a JVM Thread metrik

Tracy

Tracy je užitečný nástroj, který pomáhá vývojářům snadno ladit programy PHP. Má příjemný design a pokročilé funkce, jako je podpora CLI, ladění hovorů AJAX a další.

Dokáže rychle najít a opravit chyby, vypsat proměnné, protokolovat chyby, vizualizovat spotřebu paměti a určit dobu provádění dotazů nebo skriptů. Použití barevného kódování a zvýraznění problémů červeně s jasným vysvětlením vám pomůže snadno vizualizovat výjimky a chyby a porozumět jim.

Tracy přichází s funkcí protokolování a autodetekcí prostředí. Ukládá data do log souborů a zobrazuje návštěvníkovi chybová hlášení serveru během prostojů. Tracy lze také integrovat s Drupal 7, OpenCart, WordPress a další.

vprof

vprof je vizuální profiler pro aplikace Python. Poskytuje bohaté, interaktivní vizualizace pro různé charakteristiky vašeho programu Python, jako je využití paměti a doba běhu.

Je k dispozici pod licencí BSD a podporuje Python 3.4 a vyšší.

Závěr

Výkon aplikací je zásadním faktorem při plnění očekávání koncových uživatelů. A pokud se vyskytnou problémy s výkonem, musíte být připraveni diagnostikovat problém, než ovlivníte zkušenost koncového uživatele.

Pokračujte tedy v optimalizaci svých aplikací a okamžitě opravte problémy, abyste uživatelům i nadále poskytovali superrychlý výkon aplikací pomocí nástrojů, které jsem zmínil v tomto článku.

Zde je rychlá srovnávací tabulka, která ukazuje výše uvedené profilovače a k čemu se většinou používá.

název
Jazyky
py-špion
Krajta
Pyroskop
Python, Ruby, Go
Bubbleprof
Node.js
Pyinstrument
Krajta
Xdebug
PHP
SPX
PHP
Předpona
Python, .NET, Java, Node.js, Ruby, PHP
Scalene
Krajta
VisualVM
Jáva
Orbit Profiler
C, C++
Uber JVM Profiler
Jáva
Tracy
PHP
vprof
Krajta

x