Troubleshoot Java Memory Leaks

Configurare noua (How To)

Situatie

În timp ce colecția de gunoi a JVM reduce foarte mult posibilitățile de introducere a scurgerilor de memorie într-o bază de date, aceasta nu le elimină complet. De exemplu, luați în considerare o pagină web al cărei cod adaugă obiectul utilizator actual la un set static. În acest caz, dimensiunile setului cresc în timp și ar putea consuma până la urmă cantități semnificative de memorie. În general, scurgeri apar atunci când un cod de aplicație pune obiecte într-o colecție statică și nu le elimină chiar și atunci când nu mai sunt necesare. În mediile de producție cu volum mare de lucru, dacă colecția este actualizată frecvent, este posibil ca aplicațiile să se prăbușească din cauza unei memorii insuficiente. De asemenea, ar putea duce la degradarea performanțelor sistemului, deoarece sistemul de operare pornește memoria de paginare pe disc.

Solutie

Pasi de urmat

Condiții pentru depanarea pierderilor de memorie Java

Detectarea automată a scurgerilor folosește sesiunile Capture On Demand pentru a capta orice colecție activă (adică orice clasă care implementează interfața JDK Map sau Collection) în timpul perioadei Capture (implicit este de 10 minute) și apoi le califică pe baza următoarelor criterii: Pentru ca un obiect de colectare să fie identificat și monitorizat, acesta trebuie să îndeplinească următoarele condiții: Colecția a fost în viață timp de cel puțin N minute. Implicit este de 30 de minute, configurabil cu proprietatea de vârf minim pentru evaluarea în minute. Colecția are cel puțin N elemente. Implicit este 1000 de elemente, configurabile cu proprietatea nodului minim-număr de elemente-în-colecție-la-adâncime. Colecția Deep Size este de cel puțin N MB. Implicit este de 5 MB, configurabil cu proprietatea minim-size-pentru-evaluare-in-mb. Deep Size se calculează prin trecerea grafurilor obiect recursive ale tuturor obiectelor din colecție.

Flux de lucru pentru depanarea scurgerilor de memorie

Utilizați următorul flux de lucru pentru a depana scurgerile de memorie pe dispozitivele JVM care au fost identificate cu o problemă potențială de scurgere a memoriei:

Monitorizați memoria pentru eventualele scurgeri de memorie JMV

Activați detectarea automată a scurgerilor

Începeți sesiunea de captare la cerere Detectați și depanați starea de scurgere

Acești pași sunt descriși în secțiunile următoare.

Monitorizați memoria pentru eventualele scurgeri JVM

Utilizați tabloul de bord pentru a identifica scurgeri de memorie. O posibilă scurgere de memorie este indicată de o tendință crescătoare a haldei, precum și de biblioteca veche / memorie de generație veche.

Un obiect este marcat automat ca un obiect potențial scurgeri când prezintă o panta de creștere pozitivă și abruptă. Tabloul de bord pentru memorie automată arată:

Dimensiunea colecției: Numărul elementelor dintr-o colecție.

Potențial scurgeri: colecțiile potențial scurgeri sunt marcate ca roșii.

Ar trebui să începeți sesiunile de diagnosticare cu privire la obiecte care pot fi scurgeri.

Stare: Indică dacă a fost pornită o sesiune de diagnosticare a unui obiect.

Tendința mărimii colecției: O panta de creștere pozitivă și abruptă indică scurgerea memoriei potențiale.

Remediați problemele de memorie
După detectarea unei eventuale scurgeri de memorie, depanarea scurgerii implică efectuarea următoarelor trei acțiuni:

Selectați Obiectul colecției pe care doriți să îl monitorizați
Utilizați inspecția conținutului
Utilizați urmărirea accesului
Selectați Obiectul colecției pentru a fi monitorizat
În panoul de control pentru detectarea scurgerilor automate, faceți clic cu butonul din dreapta pe numele clasei și faceți clic pe Drill Down.

Din motive de performanță, porniți sesiunea de depanare într-un singur obiect de colecție la un moment dat.

Utilizați inspecția conținutului
Inspecția conținutului identifică partea din care face parte colecția, astfel încât să puteți începe depanarea. Permite monitorizarea histogramelor tuturor elementelor dintr-o anumită colecție.

Activați detectarea automată a scurgerilor pornind o sesiune de captare la cerere, selectați obiectul pe care doriți să-l depanați și urmați pașii de mai jos:

1 Faceți clic pe fila Inspecție conținut.
2 Faceți clic pe Start Sumar sumar conținut Captură sesiune pentru a începe sesiunea de inspecție de conținut.
3 Introduceți durata sesiunii. Permiteți cel puțin 1-2 minute pentru generarea de date.
4 Faceți clic pe Reîmprospătare pentru a prelua datele sesiunii.
5 Faceți clic pe instantaneu pentru a vedea detalii despre o sesiune individuală.

Utilizați urmărirea accesului
Utilizați urmărirea accesului pentru a vizualiza căile de cod reale și tranzacțiile de afaceri care accesează obiectul colecții.

După cum este descris mai sus în Fluxul de lucru pentru depanarea scurgerilor de memorie, activați Detectarea automată a scurgerilor, începeți o sesiune de captare la cerere, selectați obiectul pe care doriți să îl depanați și apoi urmați pașii de mai jos:

1 Selectați fila Urmărire acces
2 Faceți clic pe Start Sesiune de urmărire a accesului pentru a începe sesiunea de urmărire.
3 Introduceți durata sesiunii. Permiteți cel puțin 1-2 minute pentru generarea de date.
4 Faceți clic pe Actualizați pentru a prelua datele sesiunii.
5 Faceți clic pe instantaneu pentru a vedea detalii despre o sesiune individuală.

Panoul de informații privind depanarea arată urmărirea stivei Java asociată sesiunii. Implicit, următoarea stivă este afișată la o adâncime de 10 linii. Dacă doriți să măriți temporar numărul capturilor de linii, puteți utiliza proprietatea agentului Java cu profunzimea maximă a activității de urmărire descrisă pe referința Proprietăți Nod Proprietăți Agent.

Creșterea adâncimii stivei de stivă poate consuma o cantitate semnificativă de resurse de sistem. Asigurați-vă că ați înlăturat proprietatea sau l-ați readus la valoarea implicită de 10 după ce ați capturat informațiile dorite.

Tip solutie

Permanent

Voteaza

(8 din 31 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?