Articol tehnic
Acest articol a fost actualizat pentru a include software-ul GC Portal pentru Linux și Java Desktop System (JDS), disponibil atât pentru Sun Java System Application Server 7 (fostul Sun ONE Application Server 7 (S1AS7)), cât și pentru serverele Tomcat. Inițial, a fost pus la dispoziție doar pentru Solaris și Windows. Această versiune a software-ului GC Portal include, de asemenea, VisualGC integrat în GC Portal.
Proiectul GC Portal permite analiza și reglarea performanțelor aplicațiilor Java din perspectiva garbage collection (GC) prin extragerea jurnalelor verbose:gc
generate de JVM. GC Portal este o pagină unică pentru problemele legate de GC și include o colecție extinsă de whitepaper-uri, studii de caz și alte materiale. Portalul este destinat a fi utilizat cu HotSpot JVM de la Sun Microsystems, distribuit ca parte a Java 2, Standard Edition (J2SE). Utilizarea portalului GC permite dezvoltatorilor să modeleze comportamentele aplicației și ale JVM din perspectiva GC. Acest articol prezintă designul și caracteristicile Portalului GC, pentru a permite dezvoltatorilor să îl utilizeze ca instrument de analiză și reglare a GC.
Portalul GC necesită utilizarea următoarelor comutatoare de către JVM pentru generarea de verbose:gc
jurnale care sunt procesate de Portal pentru analiză.
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
Nu este necesară utilizarea altor comutatoare JVM pentru generarea jurnalelor corespunzătoare pentru GC Portal, dar pot fi adăugate după cum se consideră adecvat pentru reglarea și dimensionarea JVM și a aplicației. Notă: Comutatoarele -XX nu sunt standard și, de asemenea, pot fi modificate fără notificare în versiunile viitoare ale JVM.
Modelarea aplicațiilor și reglarea performanțelor din perspectiva GC
Modelarea aplicațiilor Java permite dezvoltatorilor să elimine imprevizibilitatea atribuită frecvenței și duratei pauzelor pentru garbage collection. Aceste pauze sunt direct legate de:
- Numărul și dimensiunea totală a obiectelor create și în viață
- Viața medie de viață a acestor obiecte
- Dimensiunea heap-ului JVM
Pe baza analizei furnizate de GC Portal pentru un set specific de verbose:gc
fișiere jurnal alimentate către Portal, dezvoltatorii pot construi un model care să îi ajute să înțeleagă mai bine comportamentul aplicației și al JVM.
Logurile verbose:gc
conțin informații valoroase despre:
- Timpurile de pauză GC
- Frecvența GC
- Timpurile de execuție a aplicației
- Dimensiunea obiectelor create și distruse
- Rata de creare a obiectelor
- Memoria reciclată la fiecare GC
Comportamentul aplicației poate fi reprezentat grafic și analizat pentru a determina diferitele relații dintre durata pauzelor, frecvența pauzelor, rata de creare a obiectelor și memoria eliberată. Analiza acestor informații poate permite dezvoltatorilor să regleze performanța unei aplicații, optimizând frecvența GC și timpii de colectare prin specificarea celor mai bune dimensiuni ale heap-ului, a altor opțiuni JVM și a algoritmilor GC alternativi pentru o anumită situație.
Informații derivate din jurnalele verbose:gc pentru analiza și modelarea comportamentului GC
Acest tip de informații poate fi utilizat pentru a regla performanța procesului de colectare a gunoiului.
Media pauzelor GC în generația tânără și în generația veche
Timpul mediu în care aplicația este suspendată în timp ce colectarea gunoiului se face în JVM.
Frecvența medie GC în generația tânără și în generația veche
Periodicitatea la care se execută garbage collector în generația tânără și în generația veche. Aceasta poate fi obținută deoarece instanța de timp a fiecărei activități GC este înregistrată.
GC sequential overhead
Procentul de timp de sistem pentru care aplicația este suspendată pentru ca colectarea gunoiului să aibă loc. Se calculează ca fiind valoarea medie. GC pause * Avg. GC frequency * 100%
GC concurrent overhead
Procentul de timp de sistem pentru care colectarea gunoiului are loc concomitent cu aplicația. Calculat ca timp GC concurent mediu (faza de măturare) * frecvență GC concurentă medie / nr. de unități centrale de procesare
Memorie reciclată de fiecare GC în generația tânără și în generația veche
Totalul de gunoi colectat în timpul fiecărui GC.
Rata de alocare
Rata la care datele sunt alocate de aplicație în generația tânără. În cazul în care heap-ul generației tinere occupancy_at_start_of_current_gc=x, occupancy_at_end_of_previous_gc = y și frecvența GC este de 1 pe secundă, atunci rata de alocare este de aproximativ x-y pe secundă.
Rata de promovare
Rata la care datele sunt promovate în generația veche.
Totalul datelor alocate de aplicație
Acesta este totalul datelor care sunt alocate de aplicație per tranzacție.
Datele totale pot fi împărțite în date pe termen scurt și date pe termen lung
Datele pe termen lung sunt cele care supraviețuiesc ciclurilor GC din generația tânără și sunt promovate în generația veche.
Date pe termen scurt
Datele pe termen scurt
Datele cu durată de viață scurtă care mor foarte repede și sunt colectate în generația tânără. Aceasta poate fi calculată ca Total date – Date pe termen lung.
Total date active
Acesta este totalul datelor vii la un moment dat. Acest lucru este esențial pentru construirea unui model de dimensionare a heap-ului JVM. De exemplu, pentru o sarcină de 100 de tranzacții pe secundă, cu date pe termen lung de 50K pe tranzacție care durează cel puțin 40 de secunde, amprenta minimă de memorie a vechii generații ar trebui să fie
50K*40s*100 = 200M
Scurgeri de memorie
Acestea pot fi detectate, iar erorile de „out of memory” pot fi mai bine înțelese prin monitorizarea gunoiului colectat la fiecare baleiaj, așa cum se arată în aceste jurnale.
Flags and Switches for Generating GC Logs
Există o mulțime de informații utile legate de GC pe care JVM le poate înregistra într-un fișier. Aceste informații sunt utilizate de GC Portal pentru a regla și dimensiona aplicațiile și JVM-ul din perspectiva GC. Jurnalele care conțin informații detaliate despre GC sunt generate atunci când o aplicație Java este rulată cu următoarele comutatoare:
– verbose:gc
Acest indicator activează înregistrarea informațiilor despre GC. Disponibil în toate JVM-urile.
-XX:+PrintGCTimeStamps
Tipărește momentele la care au loc GC-urile în raport cu începutul aplicației. Disponibil numai începând cu J2SE1.4.0.
-XX:+PrintGCDetails
Oferă detalii despre GC-uri, cum ar fi:
- Dimensiunea generației tinere și a generației vechi înainte și după GC-uri
- Dimensiunea totală a heap-ului
- Timpul necesar pentru ca un GC să aibă loc în generația tânără și în generația veche
- Dimensiunea obiectelor promovate la fiecare GC
Disponibil numai din JVM1.4.0.
Utilizarea portalului GC pentru modelarea aplicațiilor și reglarea performanței
Portalul GC poate fi utilizat pentru a înțelege mai bine comportamentul GC al unei aplicații, astfel încât să se regleze performanța și să se dimensioneze aplicațiile pentru a funcționa în mod optim în condiții slabe, de vârf și de explozie. Acesta suportă J2SE1.2.2, J2SE1.3, J2SE1.4 și J2SE1.4.1 și următoarele, inclusiv cele două noi implementări de colectare a gunoiului, Parallel Collector și Concurrent Collector. Acesta permite dezvoltatorilor să trimită fișiere jurnal GC și să analizeze comportamentul aplicației, pe baza acestor fișiere jurnal. De asemenea, ia în considerare unele informații specifice aplicației și mediului, inclusiv:
-
Transaction Rate or Server Load
Acest lucru se aplică aplica aplicațiilor tipice de tip server-side care funcționează într-o configurație Client-Server. Pentru astfel de aplicații, aceasta este rata la care clientul ar putea genera o sarcină constantă pentru ca serverul să o proceseze și este utilă pentru o analiză a stării constante a serverului. Analiza stării de echilibru poate include mai multe scenarii, cum ar fi situația cea mai defavorabilă/cu vârf/încărcare sau o situație medie. Aceste informații nu sunt obligatorii. În cazul în care nu este disponibilă sau nu este aplicabilă, poate fi ignorată. În acest caz, unele dintre informațiile prezentate de portal ar trebui, de asemenea, să fie ignorate, printre care se numără:
- Trasmiterea teoretică
- Date pe termen scurt
- Date pe termen lung
-
Numărul de procesoare de pe mașina țintă
Aceste informații sunt utilizate pentru a efectua anumite calcule de către portal, cum ar fi cheltuielile generale ale GC concurente.
-
Versiunea JVM utilizată de aplicație (1.2.2_xx, 1.3.x, 1.4.0, 1.4.0, 1.4.1)
Deoarece formatul jurnalului
verbose:gc
nu este standard și au existat modificări de la JVM, aceste informații sunt necesare pentru GC Portal.
Proiectarea portalului GC
Portalul GC este alcătuit din patru motoare:
- Motor de analiză și raportare
- Motor grafic
- Motor de inteligență
- Motor de sesiune și stocare
- VisualGC
Motor de analiză și raportare
- Încarcă
verbose:gc
fișierele jurnal, le explorează și raportează:- Pauzele GC în generația tânără și în generația veche
- Frecvența GC în generația tânără și în generația veche
- Rata de alocare a obiectelor
- Rata de promovare a obiectelor din generația tânără în generația veche
- Timp GC total
Timp total al aplicației
- GC secvențial overhead
Dimensiunile inițiale și finale ale heap-ului în generațiile tânără și veche
GC concurrent overhead
- Date pe termen scurt pe tranzacție
- Date pe termen lung pe tranzacție
- Trasmitere maximă teoretică
- Eficiența PCU
Aceste informații pot fi ignorate pentru aplicațiile care nu sunt bazate pe tranzacții, dar este relevantă pentru aplicațiile de tip client sau pentru cele care ar putea prezenta un comportament extrem de fasonat.
- Utilizatorul poate vizualiza datele GC, eșantionate la intervale de timp alese pentru întreaga execuție.
Aceste informații detaliate despre GC eșantionate la intervale alese pentru întreaga execuție sunt extrem de utile în cazul în care aplicațiile prezintă un comportament variat în timp, cum ar fi aplicațiile fazate, ciclice sau cu reacții aleatorii, iar informațiile sumare medii ar putea fi distorsionate ca urmare. Aceste informații detaliate și eșantionate pot fi utilizate pentru a vedea comportamentul aplicației și al JVM pe măsură ce se modifică în timp.
Informații detaliate privind reciclarea memoriei în timp în generațiile tinere și vechi
- Memorie înainte de GC
- Memorie eliberată la fiecare GC
Memorie după GC
- Disponibil dacă comutatorul
-XX:+PrintTenuringDistribution
este utilizat pentru a genera jurnale.
Figura 1 este un instantaneu al unui exemplu de raport prezentat de motorul Analyzer al portalului GC.
Figura 1. Instantaneu al motorului de analiză din GC Portal
Motor grafic
Majoritatea informațiilor care sunt prezentate de motorul Analyzer sub formă tabelară pot fi reprezentate grafic. Mai multe diagrame pot fi trasate pe același grafic pentru a ajuta la comparații.
- Prezentare grafică a analizei detaliate a cronologiei GC
- Prezentare grafică a informațiilor privind reciclarea memoriei la fiecare GC
- Comparare grafică a informațiilor GC din diferite fișiere jurnal
- Prezentare grafică a informațiilor privind durata de viață a obiectelor pentru fiecare „vârstă”
Figura 2. Instantaneu al motorului grafic al portalului GC
Motor de informații
Motor de informații este alcătuit din:
-
Recomandări generale
Această secțiune oferă documente care acoperă informații generale și recomandări privind reglarea performanței GC. Portalul nu oferă recomandări dinamice sau reglaje automate. Recomandările includ informații generale despre cum să:
- Reduceți pauza și frecvența GC
Reduceți cheltuielile secvențiale GC
- Alegeți diferite opțiuni și comutatoare JVM.
Dimensionați grămezile de generație tânără și veche pentru a face față unei sarcini date Detectați scurgerile de memorie Alegeți colectori
Clasificați execuțiile aplicației pe baza datelor analizate din mai multe verbose:gc
jurnale. Utilizatorul poate alege fișierele (dintre toate cele care au fost încărcate) pentru modelare pe baza următoarelor opțiuni:
- Rata de tranzacționare
- Numărul de procesoare
- Dimensiunea generației tinere
- Dimensiunea generației vechi
- Versiunea JDK
- Dimensiunile heap
Utilizatorul poate clasifica mediul JVM optim pe baza următoarelor criterii:
- GGC pauze
GC cheltuieli generale secvențiale
Utilizatorul poate, de asemenea, să vizualizeze comparația grafică a diferitelor execuții.
Figura 3. Instantaneu al motorului de inteligență al portalului GC
Proiecții pentru dimensionare și tuning prin scenarii „what-if”
Cum s-ar putea schimba comportamentul GC odată cu modificarea dimensiunii generației tinere. Această funcționalitate este în prezent limitată și funcționează numai pe J2SE1.4.1 și mai departe, utilizând Concurrent Collector. Rezultatul proiecției arată schimbările potențiale în:
- Pauză GC
- Frecvența GC
- Încărcarea secvențială a GC
- Utilizarea PCU (%)
- Viteza
- Rata de alocare
- Rata de promovare
- Dimensiunea generației scurtelived data
Dimensiunea datelor cu durată lungă de viață
Studii de caz
Câteva studii de caz din lumea reală privind modul de reglare din perspectiva GC.
Indicatori către unele white papers cu detalii detaliate despre reglarea GC.
Session and Storage Engine
- Gestionați sesiunile utilizatorilor
- Gestionați și stocați profilurile utilizatorilor
- Gestionați și stocați în siguranță datele/ jurnalele utilizatorilor
- Puneți jurnalele utilizatorilor/datelor la dispoziție pentru vizualizare de referință și modelare empirică
Figura 4. Instantaneu al motorului de stocare al portalului GC
VisualGC
Scopul visualgc se atașează la o JVM HotSpot instrumentată și colectează și afișează grafic datele de performanță privind colectarea gunoiului, încărcătorul de clase și compilatorul HotSpot. Acesta este încorporat în portalul GC pentru a colecta informații legate de GC în timpul execuției JVM. GC Portal utilizează instrumentul webstart pentru a rula și afișa informațiile visualGC într-un browser. Mai multe detalii despre acest instrument sunt disponibile pe pagina CoolStuff – jvmstat. Fișierul ReadMe pentru rularea VisualGC din cadrul GC Portal este încorporat în software-ul GC Portal.
Recunoștințe:
Autorul dorește să le mulțumească lui Mayank Srivastava, Nagendra Nagarajayya, Nandula Narasimham și S.R.Venkatramanan pentru contribuția lor la GC Portal. Autorul ar dori, de asemenea, să mulțumească arhitecților și experților Sun JVM garbage collection John Coomes, David Detlefs, Steve Heller, Peter Kessler, Ross Knippel, Jon Masamitsu, James Mcilree și Y.S. Ramakrishna pentru ajutorul și îndrumarea lor în această lucrare. Autorul ar dori, de asemenea, să mulțumească membrilor echipei de performanță JVM de la Sun, Timothy Cramer și Brian Doherty (autorul instrumentelor VisualGC și jvmstat) pentru ajutorul acordat în vederea integrării VisualGC în GC Portal.
Despre autor:
Alka Gupta este membru al personalului tehnic la Sun Microsystems. Ea este responsabilă de colaborarea cu ISV-urile și partenerii Sun pentru a-i ajuta să adopte rapid și eficient tehnologiile și platformele Sun emergente. Lucrează în domeniul tuningului de performanță pe platformele Sun de aproape 7 ani și este în această industrie de aproape 10 ani. Alka a absolvit Institutul Indian de Tehnologie (IIT), India.
Leave a Reply