Proilery Javy: Proč potřebujete tyto 3 různé typy

Odstraňování problémů s výkonem ve výrobě může být bez správných nástrojů nepříjemné a v některých případech nemožné. Profilování Javy existuje odjakživa, ale profilery Javy, na které většina vývojářů myslí, jsou pouze jednoho typu: standardní profilery JVM.

Používání jednoho typu profileru však nestačí.

Předpokládejme, že analyzujete výkon své aplikace. Existuje více profilovacích činností, které můžete provádět. Obecně platí, že standardní profilery zvládají profilování paměti, profilování procesoru a profilování vláken.

Ale i s tímto pokrytím, při použití kombinace více profilerů najdete více problémů s výkonem. Je to proto, že každý profiler je v určitém aspektu lepší pro vyhledání výkonnostní chyby.

Profiler Javy

V tomto příspěvku se budeme zabývat třemi typy profilerů Javy a důvody, proč při vývoji aplikace potřebujeme všechny. Začneme typy a ponoříme se do hloubky každého z nich.

Podíváme se na tři různé druhy profilerů Javy:

  1. Standardní profilery JVM, které sledují každý detail JVM (CPU, vlákna, paměť, garbage collection atd.).
  2. Lehké profilery, které zvýrazňují vaši aplikaci s trochou abstrakce.
  3. Nástroje pro správu výkonu aplikací (APM) používané pro sledování aplikací v živém provozu v produkčním prostředí.
Nová výzva k akci

Standardní profilery JVM

Produkty jako VisualVM, JProfiler, YourKit a Java Mission Control.

Standardní profiler Javy jistě poskytuje nejvíce dat, ale ne nutně nejužitečnější informace. To závisí na typu úlohy ladění.

Profilovače JavaVM budou sledovat všechna volání metod a využití paměti. To umožňuje vývojáři ponořit se do struktury volání z libovolného úhlu pohledu.

Pros:

  • Skvělé pro sledování úniků paměti, standardní profilery podrobně popisují veškeré využití paměti JVM a které třídy/objekty jsou za to zodpovědné. Možnost ručně spustit garbage collection a poté zkontrolovat spotřebu paměti může snadno posvítit na třídy a procesy, které drží paměť omylem.
  • Dobré pro sledování využití procesoru, profiler Javy obvykle poskytuje funkci vzorkování procesoru, která sleduje a agreguje čas procesoru podle tříd a metod, aby pomohla vynulovat horká místa.

Nevýhody:

  • Vyžaduje přímé připojení ke sledovanému JVM; to ve většině případů končí omezením použití na vývojová prostředí. (Poznámka: některé profilery mohou v omezené míře pracovat s výpisy vláken a paměti.)
  • Zpomalují aplikaci; pro vysokou úroveň poskytovaných detailů je zapotřebí značný výpočetní výkon.

Lehké Java Transaction Profilers

Produkty jako XRebel a Stackify Prefix.

Lehké profilery přistupují ke sledování aplikace jinak – injektují se přímo do kódu.

  • Aspect Profilery využívají aspektově orientované programování (AOP) a injektují kód na začátek a konec určených metod. Injektovaný kód může spustit časovač a po ukončení metody pak ohlásit uplynulý čas. Tyto profilovače se snadno nastavují, ale musíte vědět, co chcete profilovat. Příklad najdete v části Profilování metod Spring AOP.
  • Profilovače Java Agent používají rozhraní Java Instrumentation API k injektování kódu do vaší aplikace. Tato metoda má větší přístup k vaší aplikaci, protože kód je přepisován na úrovni bajtkódu. To umožňuje instrumentovat jakýkoli kód běžící ve vaší aplikaci – ať už jde o kód, který jste napsali, nebo o knihovny třetích stran, na kterých vaše aplikace závisí. Podívejte se na tento úvod do agentů Javy, kde se dozvíte, jak to všechno funguje.

Profilovače Aspect se nastavují poměrně snadno, ale jsou omezené v tom, co mohou sledovat, a jsou zatížené podrobným popisem všeho, co chcete, aby bylo sledováno. Java Agenti mají velkou výhodu v hloubce sledování, ale jsou mnohem složitější na psaní.

Stackify Prefix je profiler Javy orientovaný na vývojáře, který v zákulisí používá metodu profileru Java Agent.

Zajímavé je, že Prefix již zná nejžádanější třídy a knihovny třetích stran, které chtějí vývojáři instrumentovat – takže je nemusíte všechny podrobně popisovat. Navíc přebírá všechny statistiky z instrumentace a zobrazuje je jednoduchým a srozumitelným způsobem.

Příklad při spuštění aplikace pomocí Hibernate Prefix nejen podrobně popíše uplynulý čas dotazů, ale také zobrazí hodnoty parametrů generovaného SQL. Když vaše aplikace volá rozhraní SOAP/REST API, Prefix poskytne obsah požadavků a odpovědí.

Příklad profileru Java Prefix
Snímek obrazovky Prefix: Tomcat Web Request Trace

Nízká režie, profilování Java JVM ve výrobě (APM)

Všechny dosavadní profilery byly skvělé pro vývoj, ale sledování výkonu systému ve výrobě je velmi důležité.

Produkce je vždy jiné prostředí – vývojová a stagingová nastavení obvykle nemají stejné datové sady a zátěž.

Přístroje Java APM obvykle používají metodu profileru Java Agent, ale s jinými pravidly instrumentace, aby mohly běžet bez ovlivnění výkonu v produkci. Trik s těmito profilery spočívá v poskytování správných informací chytrým způsobem, aby nezabíraly cykly procesoru.

Stackify Retrace je nástroj APM, který používá stejnou technologii jako Stackify Prefix s několika úpravami pro hladký běh ve stagingových a produkčních prostředích.

To se provádí agregací statistik časování a vzorkováním stop. Tím získáte přehled na úrovni metod o kódu vaší aplikace, která běží v produkčním prostředí.

Pokud tedy máte pomalý webový požadavek, promítne se to do stopy, která se zobrazí v Retrace. Odtud se můžete ponořit dovnitř a zjistit, které metody jsou viníkem.

agregace výkonu profileru Java

Snímek obrazovky Retrace: Agregace webových požadavků za 4 hodiny

java profilování tomcat trace
Retrace Screenshot: Proč potřebujete pro svou aplikaci všechny 3 profilery?

Standardní profilery jsou dobré při hledání výkonnostních problémů ve fázi vývoje. Produkce je však jiný scénář. Chování vaší aplikace se může měnit na základě příchozího provozu, požadavků serveru, odezvy a mnoha dalších věcí.

Jaké je tedy řešení pro produkční prostředí? Odpovědí jsou nástroje APM. Nástroje APM se zaměřují na produkční prostředí a poskytují zprávu týkající se výkonu vaší aplikace.

Standardní profilery tedy pomáhají při vývoji a nástroje APM pomáhají v produkci. Možná se ptáte, k čemu jsou potřeba lehké transakční profilery.

No, lehké profilery se řídí jiným přístupem k profilování kódu. Vkládají se přímo do kódu – zejména na začátek a konec metody.

Jsou také snadno nastavitelné a spotřebovávají relativně méně prostředků. To je velmi užitečné pro aplikace, které používají hardwarovou transakční paměť. Tyto aplikace vyžadují propracované analytické nástroje, které přesně poukáží na to, která metoda nebo funkce způsobuje problémy s výkonem.

Je nepochybné, že pokud vyvíjíte složitou aplikaci, budete potřebovat všechny tři profilery. Každý typ profileru má jedinečný přístup, který kontroluje aplikaci na výkonnostní problémy.

Průzkum společnosti RebelLab také ukázal, že většina společností používá k nalezení výkonnostních problémů v aplikaci více profilerů kódu.

Proč jsou některé profilery Javy tak drahé?

XRebel je skvělý nástroj, ale stojí 365 dolarů ročně. Stackify Prefix je zdarma a poskytuje většinu stejných funkcí.

Největším problémem řešení APM je rozhodně jejich cena. Tradičně byla tak drahá, že si je mohly dovolit jen největší podniky.

Nedává moc smysl utrácet přibližně 100 dolarů měsíčně za server v Azure nebo AWS a pak utrácet téměř 200 dolarů měsíčně za produkt, jako je New Relic.

Monitorovací nástroje by neměly stát více než servery!

Přečtěte si více:

Zabalíme to

Teď, když jste se dozvěděli o třech typech profilovačů kódu Javy, je čas se rozhodnout, zda je opravdu všechny potřebujete.

Odpověď spočívá v povaze vaší aplikace.

Je-li malá, jako například systém pro správu výdajů v místní firmě nebo obchodě, je profilování velmi jednoduché. Stačí vám k tomu standardní profilovač.

Pokud vyvíjíte webovou aplikaci, jako je systém sledování kurýrních zařízení, mohou k vaší aplikaci přistupovat tisíce uživatelů. V takovém případě budete potřebovat také nástroje APM pro produkční prostředí.

Nakonec, pokud je vaše aplikace určena pro vestavěné systémy, budete potřebovat všechny tři.

Vyberte si dobře a užijte si vývoj aplikace, která poskytuje optimální výkon.

Začněte zkušební verzi zdarma

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.