Diagnózis outofmemoryerror rögtönzött eszközökkel

Az egyik kollégám egy ügyes a filozófia „alapértelmezett beállítások”. Ez a filozófia támogatja a következő megközelítést: ne próbálja megváltoztatni a környezetet, hogy illeszkedjen az Ön igényeinek - csak megtanulják, hogyan kell használni a standard environment'om.







Annak ellenére, hogy önmagában ez a megközelítés meglehetősen ellentmondásos, megvannak a maga pluses. Képes megoldani a problémákat a rendszeres úton különösen segít, ha kell, hogy gyorsan diagnosztizálják minden problémát, és akkor nem kell a testreszabott environment'a. Például, ha ideiglenesen dolgozik egy másik autó, vagy földrajzilag távol az édes szív, tökéletesen hangolt environment'a. Ezért úgy vélem, hogy ez nagyon fontos, hogy képes diagnosztizálni egy tipikus probléma helyzeteket kizárólag főállású segédprogramok. Tehát lássuk, hogyan tudjuk diagnosztizálni memória leak'i a java, ha van kéznél, nem más, mint a JDK.

Tehát a naplókat talál egy OutOfMemoryError. Mit kell tenni? Először is, meg kell érteni, hogy mit ne tegyünk. Mindenesetre nem szükséges újraindítani a folyamatot. Ezzel akkor el fogja veszíteni a teljes kupac alkalmazások, és ebben az esetben kupacban - ez az egyetlen bizonyíték, amit meg tud fogni fel az oka a OOM. Meg kell csinálni kupac dump. Ez segít megérteni, aki igénybe veszi a memóriát, valamint, hogy miért a memória nem volt megjelent kifejezetten collector'om szemetet.

A legegyszerűbb módja annak, hogy a lerakó - használják jmap hasznosságát JDK.

Most, amikor készült a lerakó, akkor könnyen visszaállíthatja a rendszert, hogy az élet, és indítsa újra a JVM, ha szükséges.

Billenő, szülés előtt, hogy a készülék figyelmezteti, csipet, valamint dump'y halom összebújik. Ha a lerakó a kérdés az autó. És hogyan érti, hogy már „nem belülről”?

A legújabb verzió a JDK jön VisualVM alkalmazás. amely többek között a memória profiler. Töltsük be a kupac lerakó VisualVM és nyissa meg a fül „osztályok”.

Diagnózis outofmemoryerror rögtönzött eszközökkel






Ebben a hozzájárulás látjuk memória kiosztás dump'e osztály tárgyakat. Ebben az esetben a több memóriát a teljes char [] típusú. Úgy látszik, valaki mindig egy csomó sort a memóriában. Ki ez?

Kattintson duplán az osztály, és adja át a példány kilátás. Itt azt látjuk, minden esetben az ilyen típusú, valamint az, aki hivatkozik rájuk, és a vizsgálat, és miért nem vette fel a GC. Tekintse több példányban.

Diagnózis outofmemoryerror rögtönzött eszközökkel

Az én esetemben, a legtöbb utalást a húr tartott alapadatok H2 használatával lágy referencia. Egy kis Google segítségével megtalálható, hogy a H2 használ puha referencia adatbázis cache. A megkülönböztető jegye a puha referenciák, hogy a JVM gyűjteni őket csak akkor, ha elfogy a memória (OOM generáció előtt). Ez teszi lágy linkek elég kényelmes mechanizmust mindenféle cache. Mindazonáltal JVM nem garantálja, hogy lesz idő, hogy összegyűjti a szimbolikus hivatkozások létrehozása előtt exception'a. Mi úgy tűnik, hogy történik az én esetemben.

Szintén érdemes megjegyezni, hogy VisualVM maga megtalálja a legközelebbi GC root, kezében a példány szemetet collector'a.

Diagnózis outofmemoryerror rögtönzött eszközökkel

Ez ment meg attól, hogy ugrik egy fa saiga referent'ov keresve a legközelebbi GC root.

Néha előfordul, hogy az ok OutOfMemoryError nem elég memória, és egyéb okok miatt. Például, ha a JVM látja, hogy ő tölti a legtöbb CPU időt a szemétgyűjtő, de nem a tényleges teljesítmény az alkalmazás, hogy létrehozza a következő kivételt.

Attól függően, hogy a pályázatot akkor marad életben, és még tovább ellátni feladatait. És néhány perc után kupac tiszta legyen, és a felesleges törmeléket (GC tudatosan ettem annyi CPU időt, és végül összeszedte a szemetet).

Hibakeresés nehéz - nincs heap'a, bár a tealevél kitalálni. Ebben az esetben meg kell indítani az alkalmazást a gombot -XX: -HeapDumpOnOutOfMemoryError. Ennek hatására a JVM, hogy egy halom billenő automatikusan mielőtt dobja a szegény alkalmazás OOM'om. Miután egy másik ilyen eset, akkor elgondolkodtató.

Runtime statisztikák

Azt is könnyen kiszámítható a teljes memória által elfoglalt egy bizonyos típusú csomagot.

Veled lenni a hatalom alapértelmezett beállításokat.




Kapcsolódó cikkek