Főoldal

"Mérnököt a mérnöktől"

A Schönherz Bázis összeköti az állást kereső és állást kínáló mérnököket.

CV küldés

Küldj önéletrajzot! Gyorsan, egyszerűen.
Megjegyzésbe írd be a pozíció nevét.
CV küldés

Iratkozz fel hírlevelünkre!

Hírek

Profiling éles környezetben
Profiling éles környezetben

Ha valaha voltak komoly problémáid a Java alkalmazásod teljesítményével, akkor tudhatod, hogy milyen fontos lehet a szál profiling. De vajon tudod melyik profilert célszerű használnod?

A profilerek két alapvető technikát használnak az egyik a mintavételezés, a másik pedig az instrumentáció.


Mintavételező profilerek

A mintavételező profiler periodikusan lekérdezi a JVM-et az összes éppen futó szál jelenlegi végrehajtási pontjáról. A profilerek ezen típusa okozza a legkevesebb többletráfordítást, ami fontos, hiszen a költséges mérési folyamatok bevezetése jelentősen megváltoztathatja az alkalmazás teljesítménybeli jellemzőit. A mintavételezési technikát használva egy pillanatképet kapunk a stack trace-ről az adott időpillanatban. Azaz a profiler megnéz minden szálat, és meghatározza, hogy az aktuális szál épp melyik metódust hajtja végre. Mivel vannak rések az egymást követő mérések között, így a mintavételező profilernek kompromisszumot kell kötnie a pontosság és a mérés miatt keletkező többletráfordítás mennyisége között. Ezt a következő ábrán illusztráltuk:


 


Ahogy az látszik, a szál az idő többségét a save metódusban töltötte, és csak kisebb részét a read metódusban. Ha a mintavételezés csak akkor történik, amikor a szál a save metódusban van (aminek nagy a valószínűsége, mivel ez a metódus dominál), a profiler azt fogja jelenteni, hogy a szál az ideje 100%-át a save metódusban töltötte, ami természetesen nem pontos információ.

Egy meglehetősen logikus módja a mintavételezési hiba minimalizálásának a mintavételezések közti intervallum csökkentése és a profiling idő növelése. Azonban ahogy ezt már az előbb is vitattuk, ez a megoldás befolyásolhatja az alkalmazás teljesítménybeli jellemzőit, tehát érdemes mérlegelnünk és az alapján az egyensúlyra törekednünk.


Instrumentált profilerek

Az instrumentált profilerek egy jóval nagyobb teljesítménybeli többletráfordítást okoznak az alkalmazásban. Ez a metódus általában profiling céljából bájtkódot szúr be az osztályokba. Ez a megközelítés nagyobb hatást gyakorol a teljesítményre, ugyanakkor pontosabb mérést is végez a mintavételező profiler eredményeivel összehasonlítva. Viszont egy másik probléma is felmerülhet a profiler bájtkód módosításának eredményeképp. Közismert tény, hogy a JIT compiler a kis metódusokat inline-olja. És mivel az instrumentációt a profiler vezeti be, lehet, hogy néhány kis metódus nem lesz többé inline-olható. Ennek komoly hatása lehet az alkalmazás teljesítményére. Ezért, ha instrumentált profilert használsz, bizonyosodj meg róla, hogy a kódnak csak egy kis szakaszát intrumentálod.


Profilerek éles környezetben

Fejlesztői környezetben könnyű a profiling, azonban lehet, hogy nem elég. Amikor valós adatokat kell kezelnünk, egy teljesen más léptéknek vagyunk kitéve, és így az alkalmazásunkban különböző szűk keresztmetszeteket is megfigyelhetünk. Ezért olyan fontos az éles környezetben is a profiling. Ahogy már korábban is vitattuk, mind a mintavételező, mind az instrumentált profilereknek megvannak az előnyei és hátrányai. Az éles (teszt)környezetben való profilinghoz egy alacsony többletráfordítású mintavételező profiler valószínűleg jobb választásnak bizonyul.

Rengeteg elérhető mintavételező profiler létezik, mint például az async-profiler, JProfiler, YourKit, VisualVM Profiler vagy a FusionReactor Production Code Profilerje. FusionReactor profilerjében az az igazán remek, hogy fel lehet konfigurálni, hogy ha az alkalmazásban egy hosszú ideje futó kérést vagy szálat detektál, akkor automatikusan mérjen. De mit is jelent a hosszú ideje futó kérés? Ennek definiálása rajtad áll, de három másodperc az alapértelmezett érték. Ha egy késleltetésérzékeny alkalmazást szeretnél monitorozni, akkor célszerű lehet ezt csökkenteni. Hasonlóan, ha az alkalmazás időigényes számításokat végez, akkor valószínűleg nem szeretnél folyamatosan értesítéseket kapni, ezért a minimális tranzakcióidő növelése szükséges lehet.

Bár nem mindig könnyű felfedni egy teljesítménybeli problémát egy futó programban, de erre a profilerek egy jó kiindulópontot adhatnak.


(Forrás


***

Ha Te is kreatív, kihívásokkal teli mérnök állást keresel minõségi munkáltatónál, jó helyen jársz, mert a Schönherz Bázis épp azért jött létre, hogy Neked segítsen.
Gyere, nézz szét aktuális állásaink között!