Java Profilers: De ce aveți nevoie de aceste 3 tipuri diferite

Debugging-ul problemelor de performanță în producție poate fi o pacoste și, în unele cazuri, imposibil fără instrumentele potrivite. Profilarea Java a existat dintotdeauna, dar profilatoarele Java la care se gândesc majoritatea dezvoltatorilor sunt de un singur tip: profilatoarele JVM standard.

Cu toate acestea, utilizarea unui singur tip de profilator nu este suficientă.

Să presupunem că analizați performanța aplicației dumneavoastră. Există mai multe activități de profilare pe care le puteți executa. În general, profilatoarele standard se ocupă de profilarea memoriei, profilarea CPU și profilarea firelor de execuție.

Dar chiar și cu toată această acoperire, prin utilizarea unei combinații de profilatoare multiple, veți găsi mai multe probleme de performanță. Acest lucru se datorează faptului că fiecare profiler este mai bun într-un anumit aspect pentru a urmări un bug de performanță.

Java Profiler

În această postare, vom discuta despre cele trei tipuri de profilatoare Java și de ce avem nevoie de toate acestea în timpul dezvoltării aplicației. Vom începe cu tipurile și ne vom scufunda în profunzime în fiecare dintre ele.

Să aruncăm o privire asupra celor trei tipuri diferite de profilatoare Java:

  1. Profilatoare JVM standard care urmăresc fiecare detaliu al JVM (CPU, fire de execuție, memorie, colectare a gunoiului etc.).
  2. Profilatoare ușoare care evidențiază aplicația dvs. cu un pic de abstractizare.
  3. Instrumente de management al performanței aplicațiilor (APM) utilizate pentru monitorizarea aplicațiilor în direct în mediile de producție.
Noi call-to-action

Profilatoare JVM standard

Produse precum VisualVM, JProfiler, YourKit și Java Mission Control.

Un profiler Java standard oferă cu siguranță cele mai multe date, dar nu neapărat cele mai utile informații. Acest lucru depinde de tipul de sarcină de depanare.

Profilerii JVM vor urmări toate apelurile de metode și utilizarea memoriei. Acest lucru permite unui dezvoltator să se scufunde în structura apelurilor din orice unghi pe care îl alege.

Pros:

  • Greai pentru depistarea scurgerilor de memorie, profilerii standard detaliază toată utilizarea memoriei de către JVM și ce clase/obiecte sunt responsabile. Posibilitatea de a rula manual colectarea gunoiului și apoi de a revizui consumul de memorie poate scoate cu ușurință în evidență clasele și procesele care rețin memoria în mod eronat.
  • Bun pentru urmărirea utilizării CPU, un profiler Java oferă, de obicei, o funcție de eșantionare a CPU pentru a urmări și agrega timpul CPU în funcție de clasă și metodă pentru a ajuta la localizarea punctelor fierbinți.

Cons:

  • Exigă o conexiune directă la JVM-ul monitorizat; acest lucru sfârșește prin a limita utilizarea la mediile de dezvoltare în majoritatea cazurilor. (Notă: unele profilatoare pot funcționa în mod limitat pe bază de fire de execuție și descărcări de memorie)
  • Încetinesc aplicația; este necesară o bună parte din puterea de procesare pentru nivelul ridicat de detalii furnizat.

Profilatoare de tranzacții Java ușoare

Produse precum XRebel și Stackify Prefix.

Profilerii ușori au o abordare diferită în urmărirea aplicației dumneavoastră, injectându-se direct în cod.

  • Profilerii de aspect utilizează programarea orientată pe aspect (AOP) pentru a injecta cod la începutul și sfârșitul metodelor specificate. Codul injectat poate să pornească un cronometru și apoi să raporteze timpul scurs atunci când metoda se termină. Aceste profilatoare sunt simplu de configurat, dar trebuie să știți ce să profilați. Pentru un exemplu, consultați Spring AOP Method Profiling.
  • Profilerii Java Agent utilizează API-ul Java Instrumentation pentru a injecta cod în aplicația dumneavoastră. Această metodă are un acces mai mare la aplicația dvs. deoarece codul este rescris la nivel de bytecode. Acest lucru permite ca orice cod care rulează în aplicația dvs. să fie instrumentat – fie că este vorba de cod scris de dvs. sau de biblioteci terțe de care depinde aplicația dvs. Consultați această introducere la Java Agents pentru a vedea cum funcționează toate acestea.

Profilerii de aspect sunt destul de ușor de configurat, dar sunt limitați în ceea ce pot monitoriza și sunt îngreunați de detalierea a tot ceea ce doriți să fie urmărit. Agenții Java au un mare avantaj în ceea ce privește profunzimea de urmărire, dar sunt mult mai complicat de scris.

Stackify Prefix este un profiler Java orientat spre dezvoltator care folosește în spatele scenei metoda profilerului Java Agent.

Ceea mai tare este că Prefix știe deja care sunt cele mai dorite clase și biblioteci terțe pe care dezvoltatorii doresc să le instrumenteze – astfel încât nu trebuie să le detaliați pe toate. În plus, preia toate statisticile din instrumentare și le afișează într-o manieră simplă și ușor de înțeles.

Ca exemplu, atunci când rulează o aplicație folosind Hibernate, Prefix nu va detalia doar timpul scurs pentru interogări, ci va afișa și valorile parametrilor pentru SQL-ul generat. Atunci când aplicația dvs. apelează la un API SOAP/REST, Prefix furnizează conținutul cererii și al răspunsului.

Exemplu de prefix pentru profilerul Java
Captură de ecran Prefix: Tomcat Web Request Trace

Low Overhead, Java JVM Profiling in Production (APM)

Toate profilatoarele de până acum au fost excelente pentru dezvoltare, dar urmărirea modului în care sistemul dvs. se comportă în producție este esențială.

Producția este întotdeauna un peisaj diferit – configurațiile de dezvoltare și de staging nu au de obicei aceleași seturi de date și sarcină.

Uneltele Java APM folosesc de obicei metoda Java Agent profiler, dar cu reguli de instrumentare diferite pentru a le permite să ruleze fără a afecta performanța în producții. Șmecheria cu aceste profilatoare este de a furniza informațiile corecte într-un mod inteligent pentru a nu ocupa cicluri CPU.

Stackify’s Retrace este un instrument APM care utilizează aceeași tehnologie ca și Stackify Prefix cu câteva ajustări pentru a funcționa fără probleme în mediile de staging și de producție.

Acest lucru se face prin agregarea statisticilor de sincronizare și prin eșantionarea urmelor. Acest lucru vă oferă vizibilitate la nivel de metodă a codului aplicației dvs. care rulează în producție.

Așa că atunci când aveți o solicitare web lentă, aceasta se va traduce printr-o urmă care va apărea în Retrace. De acolo puteți să vă scufundați și să vedeți ce metode sunt vinovate.

java profiler performance aggregation

Retrace Screenshot: Web Request Aggregation over 4 hours

java profiling tomcat trace
Retrace Screenshot: Tomcat Web Request Trace

De ce aveți nevoie de toate cele 3 profilatoare pentru aplicația dumneavoastră?

Profilatoarele standard sunt bune pentru a găsi probleme de performanță în etapa de dezvoltare. Dar producția este un scenariu diferit. Comportamentul aplicației dvs. se poate schimba în funcție de traficul de intrare, solicitarea serverului, răspunsul și multe alte lucruri.

Atunci, care este soluția pentru mediul de producție? Instrumentele APM sunt răspunsul. Instrumentele APM vizează mediul de producție și oferă un raport cu privire la performanța aplicației dumneavoastră.

Așadar, profilatoarele standard ajută în dezvoltare, iar instrumentele APM ajută în producție. S-ar putea să vă întrebați care este necesitatea profilatoarelor ușoare de tranzacții.

Ei bine, profilatoarele ușoare urmează o abordare diferită a profilării codului. Ei se injectează direct în cod – în special la începutul și la sfârșitul unei metode.

Ei sunt, de asemenea, ușor de configurat și consumă relativ puține resurse. Acest lucru este foarte util pentru aplicațiile care utilizează memoria de tranzacție hardware. Aceste aplicații necesită instrumente de analiză rafinate, care să indice exact care metodă sau funcție cauzează probleme de performanță.

Indubitabil, putem spune că, dacă dezvoltați o aplicație complexă, veți avea nevoie de toate cele trei profilatoare. Fiecare tip de profiler are o abordare unică care verifică o aplicație pentru probleme de performanță.

Studiul realizat de rebelLab a arătat, de asemenea, că majoritatea companiilor folosesc mai multe profilatoare de cod pentru a găsi probleme de performanță în aplicația lor.

De ce sunt unele profilatoare Java atât de scumpe?

XRebel este un instrument grozav, dar costă 365 de dolari pe an. Stackify Prefix este gratuit și oferă o mare parte din aceleași funcționalități.

Cea mai mare problemă cu soluțiile APM este cu siguranță prețul lor. În mod tradițional, acestea au fost atât de scumpe încât doar cele mai mari întreprinderi și le puteau permite.

Nu are prea mult sens să cheltuiești aproximativ 100 de dolari pe lună pe un server la Azure sau AWS și apoi să cheltuiești aproape 200 de dolari pe lună pentru un produs precum New Relic.

Uneltele de monitorizare nu ar trebui să coste mai mult decât serverele!

Citește mai mult: APM Pricing Is Now Affordable for All Developers, and Why They Should Care

Wrapping It Up

Acum că ați învățat despre cele trei tipuri de profilatoare de cod Java, este timpul să decideți dacă aveți cu adevărat nevoie de toate acestea.

Răspunsul se află în natura aplicației dumneavoastră.

Dacă este mică, cum ar fi un sistem de gestionare a cheltuielilor unei afaceri locale sau a unui magazin, profilarea este foarte simplă. Un profiler standard își va face treaba.

Dacă dezvoltați o aplicație web, cum ar fi sistemul de urmărire al unei unități de curierat, aplicația dumneavoastră poate fi accesată de mii de utilizatori. În acest caz, veți avea nevoie, de asemenea, de instrumente APM pentru mediul de producție.

În cele din urmă, dacă aplicația dvs. este pentru sisteme încorporate, veți avea nevoie de toate cele trei.

Alegeți bine și distrați-vă dezvoltând o aplicație care oferă performanțe optime.

Începeți o probă gratuită

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.