Poznaj i wykorzystaj optymalne sposoby na regulowanie wydajności oprogramowania Java!
Na rynku znajduje się już kolejne wydanie języka Java , oznaczone numerem 7. Oto najlepszy dowód, że język ten ma się dobrze i wciąż jest na topie. Oczywiście potwierdza to fakt, że programiści Javy to jedna z najbardziej rozchwytywanych grup na rynku pracy. Dlatego warto zainwestować w naukę tego języka. Do Javy przylgnęła krzywdząca opinia, że jest powolna i mało wydajna, ale to mit! W dzisiejszych czasach język ten ani na krok nie ustępuje innym, a jeżeli zastosujesz się do wskazówek zawartych w tej wyjątkowej książce, może je nawet prześcignąć!
Na początku lektury dowiesz się, jak wiarygodnie monitorować obciążenie systemu operacyjnego - zużycie pamięci, obciążenie procesora oraz sieci. Następnie przejdziesz do tego, na co czekasz najbardziej: do dostrajania Twojej aplikacji oraz wirtualnej maszyny Java. Poznasz szczegółowo zasady działania mechanizmów odzyskujących pamięć oraz dostępne przełączniki, które potrafią w znaczący sposób wpłynąć na wydajność środowiska. Ponadto zgłębisz tematykę wydajności aplikacji internetowych oraz technologii EJB i JPA. Jest to długo oczekiwana na polskim rynku pozycja, poświęcona zagadnieniom niezwykle istotnym z punktu widzenia programisty. To Twoja obowiązkowa lektura na najbliższe dni!
Przekonaj się, jak szybka może być Java dzięki:
wykorzystaniu właściwych przełączników
zastosowaniu narzędzi do profilowania
wyborowi właściwej wersji 32- lub 64-bitowej
optymalizacji wykorzystania sieci i pamięci
Wyciśnij siódme poty z wirtualnej maszyny Java!
Darmowy fragment publikacji:
Tytuł oryginału: Java Performance on Multi-Core Platforms, First Edition
Tłumaczenie: Lech Lachowski
Projekt okładki: proj: Studio Gravite / Olsztyn
Obarek, Pokoński, Pazdrijowski, Zaprucki
ISBN: 978-83-246-4380-6
Authorized translation from the English language edition, entitled: JAVA PERFORMANCE ON
MULTI-CORE PLATFORMS, First Edition; ISBN 0137142528; by Charlie Hunt; and John Binu;
published by Pearson Education, Inc, publishing as Prentice Hall.
Copyright © 2012 by Oracle and/or its affiliates. All rights reserved. Oracle is headquartered at 500
Oracle Parkway, Redwood Shores, CA 94065, U.S.A.
All rights reserved. No part of this book may by reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording or by any information storage
retrieval system, without permission from Pearson Education, Inc.
Polish language edition published by HELION S.A. Copyright © 2013.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były
kompletne
i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane
z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi
również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji
zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/wydjav.zip
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/wydjav
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis treĞci
Przedmowa .................................................................................................. 13
Przedmowa .................................................................................................. 15
WstĊp .......................................................................................................... 17
PodziĊkowania ............................................................................................. 21
O autorach ................................................................................................... 23
1. Strategie, podejĞcia i metodologie ........................................................... 25
Zasadnicze czynniki ....................................................................................................................26
Dwa podejĂcia: z góry do doïu oraz z doïu do góry ...................................................................29
Metoda z góry do doïu ............................................................................................................29
Metoda z doïu do góry ............................................................................................................30
Wybór odpowiedniej platformy i ocena systemu ......................................................................31
Wybór wïaĂciwej architektury procesora ...............................................................................32
Ocena wydajnoĂci systemu .....................................................................................................33
Bibliografia ...................................................................................................................................34
2. Monitorowanie wydajnoĞci systemu operacyjnego .................................. 35
Definicje ......................................................................................................................................36
Wykorzystanie CPU ....................................................................................................................36
Monitorowanie wykorzystania CPU w systemach Windows ...............................................37
Monitorowanie wykorzystania CPU w systemach Windows
za pomocÈ komendy typeperf ...............................................................................................40
Monitorowanie wykorzystania CPU w systemach Linux .....................................................41
Monitorowanie wykorzystania CPU w systemach Solaris ....................................................42
Monitorowanie wykorzystania CPU w systemach Linux i Solaris
za pomocÈ narzÚdzi wiersza poleceñ ...................................................................................45
6
WydajnoĞü Javy
Kolejka uruchamiania planisty krótkoterminowego ..................................................................48
Monitorowanie kolejki uruchamiania planisty krótkoterminowego
w systemach Windows ..........................................................................................................49
Monitorowanie kolejki uruchamiania planisty krótkoterminowego
w systemach Solaris ..............................................................................................................50
Monitorowanie kolejki uruchamiania planisty krótkoterminowego
w systemach Linux ................................................................................................................51
Wykorzystanie pamiÚci ...............................................................................................................51
Monitorowanie wykorzystania pamiÚci w systemach Windows ...........................................52
Monitorowanie wykorzystania pamiÚci w systemach Solaris ...............................................53
Monitorowanie wykorzystania pamiÚci w systemach Linux .................................................54
Monitorowanie rywalizacji o blokady w systemach Solaris ..................................................55
Monitorowanie rywalizacji o blokady w systemach Linux ...................................................57
Monitorowanie rywalizacji o blokady w systemach Windows .............................................57
Izolowanie gorÈcych blokad ....................................................................................................58
Monitorowanie mimowolnego przeïÈczania kontekstu .........................................................58
Monitorowanie migracji wÈtków ............................................................................................59
Wykorzystanie we/wy sieci .........................................................................................................59
Monitorowanie wykorzystania we/wy sieci w systemach Solaris .........................................60
Monitorowanie wykorzystania we/wy sieci w systemach Linux ..........................................61
Monitorowanie wykorzystania we/wy sieci w systemach Windows ....................................61
WzglÚdy dotyczÈce poprawy wydajnoĂci aplikacji ................................................................62
Wykorzystanie we/wy dysku .......................................................................................................63
Dodatkowe narzÚdzia wiersza poleceñ ......................................................................................65
Monitorowanie wykorzystania CPU w systemach z procesorami SPARC T ...........................66
Bibliografia ...................................................................................................................................69
3. Przegląd JVM ............................................................................................ 71
Wysokopoziomowa architektura HotSpot VM ..........................................................................72
HotSpot VM Runtime .................................................................................................................73
Opcje wiersza poleceñ ............................................................................................................74
Cykl ĝycia maszyny wirtualnej ...............................................................................................75
adowanie klas maszyny wirtualnej .......................................................................................78
Weryfikacja kodu bajtowego ...................................................................................................80
UdostÚpnianie danych klas .....................................................................................................81
Interpreter ...............................................................................................................................82
Obsïuga wyjÈtków ...................................................................................................................84
Synchronizacja .........................................................................................................................84
ZarzÈdzanie wÈtkami ...............................................................................................................85
ZarzÈdzanie stertÈ C++ .........................................................................................................89
Java Native Interface ...............................................................................................................90
Obsïuga bïÚdów krytycznych VM ..........................................................................................91
Mechanizmy odzyskiwania pamiÚci HotSpot VM ....................................................................93
Pokoleniowy mechanizm odzyskiwania pamiÚci ...................................................................93
Mïode pokolenie ......................................................................................................................95
Szybka alokacja ........................................................................................................................97
Mechanizmy odzyskiwania pamiÚci, czyli osioïkowi w ĝïoby dano .....................................97
Spis treĞci
7
Szeregowy mechanizm odzyskiwania pamiÚci ......................................................................98
Równolegïy mechanizm odzyskiwania pamiÚci: przepustowoĂÊ ma znaczenie! .................99
Przewaĝnie-równoczesny mechanizm odzyskiwania pamiÚci: opóěnienie ma znaczenie! ....99
Mechanizm odzyskiwania pamiÚci najpierw-kosz: nastÚpca CMS ....................................102
Porównanie ............................................................................................................................102
Generowanie pracy mechanizmu odzyskiwania pamiÚci ....................................................103
Perspektywa historyczna .......................................................................................................103
Kompilatory JIT HotSpot VM ..................................................................................................104
Analiza hierarchii klas ...........................................................................................................105
Polityka kompilacji ................................................................................................................106
Deoptymalizacja ....................................................................................................................107
Kompilator JIT dla aplikacji klienckich ...............................................................................108
Kompilator JIT dla aplikacji serwerowych ..........................................................................108
SSA — wykres programowo zaleĝny ....................................................................................108
NadchodzÈce poprawki .........................................................................................................110
Regulacja adaptacyjna HotSpot VM ........................................................................................111
WartoĂci domyĂlne dla Java 1.4.2 .........................................................................................111
Ergonomiczne wartoĂci domyĂlne dla 5. wersji Javy ..........................................................111
Zaktualizowane domyĂlne wartoĂci ergonomiczne dla Java 6 Update 18 ..........................113
Adaptacyjne ustalanie rozmiaru sterty Java .........................................................................115
Nie tylko ergonomia ..............................................................................................................115
Bibliografia .................................................................................................................................116
4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy ............................. 117
Definicje ....................................................................................................................................118
Odzyskiwanie pamiÚci ..............................................................................................................118
Dane istotne dla procesu odzyskiwania pamiÚci .................................................................119
Raportowanie danych procesu odzyskiwania pamiÚci ........................................................119
Analiza offline danych z procesów odzyskiwania pamiÚci ..................................................129
NarzÚdzia graficzne ...............................................................................................................132
Kompilator JIT ..........................................................................................................................150
adowanie klas ..........................................................................................................................151
Monitorowanie aplikacji Java ...................................................................................................153
Szybkie monitorowanie rywalizacji o blokady .....................................................................154
Bibliografia .................................................................................................................................156
5. Profilowanie aplikacji Java ..................................................................... 157
Terminologia ..............................................................................................................................159
Terminy zwiÈzane z profilowaniem .....................................................................................159
PojÚcia zwiÈzane z programem Oracle Solaris Studio Performance Analyzer ..................159
PojÚcia zwiÈzane z programem NetBeans Profiler .............................................................160
Oracle Solaris Studio Performance Analyzer ..........................................................................161
Obsïugiwane platformy .........................................................................................................161
Pobieranie i instalacja programu Oracle Solaris Studio Performance Analyzer ...............162
Przechwytywanie profilu Oracle Solaris Studio Performance Analyzer ............................163
PrzeglÈdanie zebranej próby ................................................................................................166
Prezentacja danych ................................................................................................................174
8
WydajnoĞü Javy
Filtrowanie danych profilu ...................................................................................................177
NarzÚdzie wiersza poleceñ er_print .....................................................................................178
Program NetBeans Profiler .......................................................................................................185
Obsïugiwane platformy .........................................................................................................186
Pobieranie i instalacja NetBeans Profiler ............................................................................186
Rozpoczynanie sesji profilowania metod .............................................................................186
Controls, czyli przyciski sterujÈce ........................................................................................193
Status ......................................................................................................................................193
Profiling Results, czyli rezultaty profilowania .....................................................................193
Saved Snapshots, czyli zapisane zrzuty ekranu ...................................................................193
View, czyli podglÈd ...............................................................................................................194
Basic Telemetry, czyli podstawowa telemetria ....................................................................194
PrzeglÈdanie aktualnych rezultatów .....................................................................................195
Wykonywanie zrzutu ekranu rezultatów .............................................................................195
Rozpoczynanie sesji profilowania pamiÚci ..........................................................................196
PrzeglÈdanie bieĝÈcych rezultatów ......................................................................................198
Wykonywanie zrzutu ekranu rezultatów .............................................................................200
Izolowanie wycieków pamiÚci ..............................................................................................201
Analiza zrzutów sterty ...........................................................................................................201
Bibliografia .................................................................................................................................202
6. Profilowanie aplikacji Java — porady i sztuczki ...................................... 203
Potencjalne obszary poprawy wydajnoĂci ................................................................................203
Wykorzystanie CPU przez jÈdro lub system ...........................................................................204
Rywalizacja o blokady ...............................................................................................................212
Uĝycie sïowa kluczowego volatile ............................................................................................221
Zmiana rozmiaru struktur danych ............................................................................................222
Zmiana rozmiaru klas StringBuilder lub StringBuffer ........................................................223
Zmiana rozmiaru klas Java Collections ................................................................................226
ZwiÚkszanie wspóïczynnika równolegïoĂci ..............................................................................230
Wysokie wykorzystanie CPU ....................................................................................................232
Inne uĝyteczne wskazówki dotyczÈce programu Performance Analyzer ..............................233
Bibliografia .................................................................................................................................235
7. Regulacja JVM krok po kroku ................................................................. 237
Metodologia ...............................................................................................................................238
Zaïoĝenia ................................................................................................................................240
Wymagania dotyczÈce infrastruktury testowania ................................................................240
Wymagania systemowe aplikacji ..............................................................................................241
DostÚpnoĂÊ ............................................................................................................................241
ZarzÈdzalnoĂÊ ........................................................................................................................241
PrzepustowoĂÊ .......................................................................................................................241
Opóěnienie i czas reakcji ......................................................................................................242
Zuĝycie pamiÚci .....................................................................................................................242
Czas uruchamiania ................................................................................................................242
Ranking wymagañ systemowych ..............................................................................................242
Wybór modelu wdroĝenia JVM ................................................................................................243
Model wdroĝenia pojedynczej instancji JVM ......................................................................243
Spis treĞci
9
Model wdroĝenia wielu instancji JVM .................................................................................243
Wskazówki ogólne .................................................................................................................244
Wybór Ărodowiska uruchomieniowego JVM.............................................................................244
¥rodowisko uruchomieniowe typu klienckiego czy serwerowego .........................................244
32-bitowa czy 64-bitowa maszyna wirtualna Javy ...............................................................245
Mechanizmy odzyskiwania pamiÚci .....................................................................................246
Podstawy regulowania mechanizmu odzyskiwania pamiÚci ...................................................246
Atrybuty wydajnoĂci ..............................................................................................................246
Podstawowe zasady ...............................................................................................................247
Opcje wiersza poleceñ oraz rejestrowanie zdarzeñ
dla mechanizmu odzyskiwania pamiÚci .............................................................................247
OkreĂlanie zuĝycia pamiÚci ......................................................................................................251
Ograniczenia ..........................................................................................................................251
Ukïad sterty HotSpot VM .....................................................................................................252
Punkt poczÈtkowy rozmiaru sterty .......................................................................................254
Obliczanie rozmiaru ĝywych danych ...................................................................................256
Konfiguracja poczÈtkowego rozmiaru sterty ........................................................................257
Dodatkowe uwagi ..................................................................................................................259
Regulowanie opóěnienia/czasu reakcji .....................................................................................259
Przesïanki ...............................................................................................................................260
Precyzyjna regulacja rozmiaru przestrzeni mïodego pokolenia .........................................261
Precyzyjna regulacja rozmiaru przestrzeni starego pokolenia ...........................................264
Precyzyjna regulacja opóěnieñ dla równoczesnego mechanizmu
odzyskiwania pamiÚci .........................................................................................................267
ObjaĂnienie przestrzeni ocalaïych ........................................................................................269
ObjaĂnienie progu zatrudnienia ...........................................................................................271
Monitorowanie progu zatrudnienia ......................................................................................272
Ustalanie rozmiaru przestrzeni ocalaïych ............................................................................274
BezpoĂrednio wywoïywane procesy odzyskiwania pamiÚci ...............................................280
Równoczesne odzyskiwanie pamiÚci dla staïego pokolenia ...............................................281
Regulacja czasu przestojów CMS .........................................................................................282
Kolejne czynnoĂci ..................................................................................................................283
Regulowanie przepustowoĂci aplikacji ....................................................................................283
Regulacja przepustowoĂci dla CMS .....................................................................................284
Regulacja przepustowoĂciowego mechanizmu odzyskiwania pamiÚci ..............................285
Regulacja rozmiaru przestrzeni ocalaïych ...........................................................................287
Regulacja liczby wÈtków przepustowoĂciowego mechanizmu odzyskiwania pamiÚci .....290
Wdroĝenie na systemach NUMA .........................................................................................291
Kolejne czynnoĂci ..................................................................................................................291
Przypadki skrajne ......................................................................................................................291
Dodatkowe opcje wiersza poleceñ do regulowania wydajnoĂci .............................................292
Najnowsze i najwiÚksze optymalizacje ................................................................................292
Analiza ucieczki .....................................................................................................................292
Blokada przeciÈgana ..............................................................................................................293
Duĝe strony pamiÚci .............................................................................................................294
Bibliografia .................................................................................................................................296
10
WydajnoĞü Javy
8. Testy porównawcze aplikacji Java ......................................................... 297
Wyzwania dotyczÈce benchmarków .........................................................................................298
Rozgrzewka ............................................................................................................................298
Odzyskiwanie pamiÚci ..........................................................................................................300
Zastosowanie metod Time interfejsów Java API .................................................................301
Usuwanie martwego kodu w wyniku optymalizacji ............................................................302
Wplatanie ...............................................................................................................................307
Deoptymalizacja ....................................................................................................................311
Porady dotyczÈce przygotowywania mikrobenchmarków ..................................................315
Projektowanie eksperymentów .................................................................................................317
Zastosowanie metod statystycznych .........................................................................................318
Obliczanie Ăredniej ................................................................................................................318
Obliczanie odchylenia standardowego .................................................................................319
OkreĂlanie przedziaïu ufnoĂci ..............................................................................................319
Zastosowanie testów hipotezy ..............................................................................................321
Porady dotyczÈce stosowania metod statystycznych ...........................................................323
Literatura ...................................................................................................................................324
Bibliografia .................................................................................................................................324
9. Testy porównawcze aplikacji wielowarstwowych .................................. 325
Wyzwania dotyczÈce benchmarków .........................................................................................326
Rozwaĝania na temat benchmarków typu enterprise ..............................................................328
Definiowanie systemu testowego (SUT) ..............................................................................328
Przygotowywanie mikrobenchmarków ................................................................................329
Definiowanie modelu interakcji z uĝytkownikiem ..............................................................329
Definiowanie metryk wydajnoĂci .........................................................................................333
Skalowanie benchmarku .......................................................................................................337
Weryfikacja za pomocÈ prawa Little’a .................................................................................338
Czas na zastanowienie ...........................................................................................................340
Analiza skalowalnoĂci ............................................................................................................343
Przeprowadzanie benchmarku .............................................................................................343
Monitorowanie serwera aplikacji .............................................................................................347
Monitorowanie za pomocÈ serwera aplikacji GlassFish .....................................................347
Monitorowanie podsystemów ...............................................................................................352
WydajnoĂÊ systemów zewnÚtrznych ....................................................................................356
We/wy dysku .........................................................................................................................359
Monitorowanie i regulacja pul zasobów ...............................................................................361
Profilowanie aplikacji enterprise ..............................................................................................362
Bibliografia .................................................................................................................................363
10. WydajnoĞü aplikacji internetowych ........................................................ 365
Testy porównawcze aplikacji internetowych ...........................................................................366
Komponenty kontenera webowego ..........................................................................................367
Konektor HTTP .....................................................................................................................368
Silnik serwletu .......................................................................................................................369
Monitorowanie i regulowanie wydajnoĂci kontenera webowego ...........................................369
Tryb deweloperski i tryb produkcyjny kontenera ...............................................................370
Menedĝer bezpieczeñstwa ....................................................................................................371
Spis treĞci
11
Regulacje JVM .......................................................................................................................371
HTTP service i kontener webowy ........................................................................................373
Nasïuchiwacz HTTP .............................................................................................................373
Najlepsze praktyki .....................................................................................................................386
Najlepsze praktyki dla serwletów i stron JSP ......................................................................386
Buforowanie pamiÚci podrÚcznej zawartoĂci ......................................................................395
TrwaïoĂÊ sesji .........................................................................................................................400
Buforowanie plików serwera HTTP .....................................................................................401
Bibliografia .................................................................................................................................405
11. WydajnoĞü usáug internetowych ............................................................. 407
WydajnoĂÊ XML ........................................................................................................................408
Cykl przetwarzania XML ......................................................................................................408
Parsowanie/unmarshalling ....................................................................................................409
DostÚp ....................................................................................................................................412
Modyfikacja ............................................................................................................................412
Serializacja/marshalling ........................................................................................................413
Weryfikacja ................................................................................................................................413
RozwiÈzywanie encji zewnÚtrznych .........................................................................................415
CzÚĂciowe przetwarzanie dokumentów XML .........................................................................417
Wybór odpowiedniego interfejsu API .....................................................................................420
Stos modelowej implementacji JAX-WS .................................................................................423
Testy porównawcze usïug internetowych ................................................................................425
Czynniki, które wpïywajÈ na wydajnoĂÊ usïugi internetowej .................................................428
Wpïyw rozmiaru wiadomoĂci ...............................................................................................428
Charakterystyki wydajnoĂci róĝnych typów schematów .....................................................430
Implementacja punktu koñcowego ......................................................................................433
WydajnoĂÊ programu obsïugi ...............................................................................................434
Najlepsze praktyki dotyczÈce wydajnoĂci ................................................................................436
Przetwarzanie binarnego bloku danych ...............................................................................436
Praca z dokumentami XML ..................................................................................................441
Wykorzystanie MTOM do wysyïania dokumentów XML w postaci zaïÈczników ............441
Korzystanie z interfejsu provider .........................................................................................444
Fast Infoset ............................................................................................................................446
Kompresja HTTP ..................................................................................................................448
WydajnoĂÊ klienta usïugi internetowej ................................................................................449
Bibliografia .................................................................................................................................450
12. WydajnoĞü Java Persistence oraz Enterprise Java Beans ....................... 451
Model programowania EJB ......................................................................................................452
Interfejs Java Persistence API i jego implementacja modelowa ............................................453
PamiÚÊ podrÚczna drugiego poziomu ..................................................................................453
Monitorowanie i regulacja kontenera EJB ..............................................................................456
Pula wÈtków ...........................................................................................................................457
Pule beanów i pamiÚci podrÚczne beanów ..........................................................................459
PamiÚÊ podrÚczna sesji EclipseLink ....................................................................................464
Poziom izolacji transakcji ..........................................................................................................465
12
WydajnoĞü Javy
Najlepsze praktyki stosowane w Enterprise Java Beans .........................................................466
Benchmark do testów porównawczych EJB wykorzystany w przykïadach .......................466
EJB 2.1 ...................................................................................................................................466
EJB 3.0 ...................................................................................................................................478
Najlepsze praktyki stosowane w Java Persistence ...................................................................481
Zapytania jÚzyka zapytañ JPA ...............................................................................................482
PamiÚÊ podrÚczna wyników zapytañ ....................................................................................484
FetchType ..............................................................................................................................485
Tworzenie puli poïÈczeñ .......................................................................................................486
Aktualizacje zbiorcze .............................................................................................................488
Wybierz wïaĂciwÈ strategiÚ blokowania bazy danych .........................................................489
Odczyty bez transakcji ..........................................................................................................490
Dziedziczenie ........................................................................................................................490
Bibliografia .................................................................................................................................490
A. Wybrane opcje wiersza poleceĔ HotSpot VM .......................................... 493
Skorowidz ................................................................................................. 511
4
Monitorowanie
wydajnoĞci maszyny
wirtualnej Javy
W tym rozdziale opisane zostaïy elementy, które powinny byÊ monitorowane na poziomie stosu
programowego maszyny wirtualnej Javy (ang. Java Virtual Machine — JVM). Ponadto przedsta-
wione zostaïy narzÚdzia sïuĝÈce do monitorowania JVM oraz najbardziej typowe, powtarzajÈce
siÚ wzorce, na które naleĝy zwracaÊ uwagÚ. Szczegóïy dotyczÈce podejmowania na podstawie ze-
branych informacji decyzji dotyczÈcych regulacji JVM znajdziesz w rozdziale 7. Na koñcu roz-
dziaïu zamieszczony zostaï równieĝ krótki podrozdziaï na temat monitorowania aplikacji.
Monitorowanie maszyny wirtualnej Javy jest czynnoĂciÈ, która zawsze powinna byÊ wykony-
wana z aplikacjÈ typu produkcyjnego. Poniewaĝ JVM jest kluczowym elementem stosu progra-
mowego, powinna byÊ monitorowana w tym samym stopniu, co sama aplikacja oraz system ope-
racyjny. Analiza informacji uzyskanych w procesie monitorowania maszyny wirtualnej Javy pozwala
stwierdziÊ, kiedy niezbÚdna jest regulacja JVM. Taka regulacja maszyny wirtualnej Javy powinna
byÊ przeprowadzana za kaĝdym razem, kiedy zmienia siÚ wersja JVM, dochodzi do zmian w syste-
mie operacyjnym (zmiana konfiguracji lub wersji), zmienia siÚ wersja aplikacji lub wykonywane sÈ
aktualizacje oraz gdy dochodzi do znaczÈcych zmian w zakresie danych wejĂciowych dla aplikacji.
Do zmiany danych wejĂciowych aplikacji moĝe dochodziÊ doĂÊ czÚsto w wielu aplikacjach Java,
co moĝe mieÊ wpïyw na wydajnoĂÊ JVM. Dlatego teĝ monitorowanie maszyny wirtualnej Javy
jest tak istotnÈ czynnoĂciÈ.
Istnieje kilka podstawowych obszarów JVM, które powinny byÊ monitorowane. NaleĝÈ do
nich procesy odzyskiwania pamiÚci, dziaïanie kompilatora JIT oraz ïadowanie klas. DostÚpnych
jest wiele narzÚdzi umoĝliwiajÈcych monitorowanie maszyny wirtualnej Javy. Niektóre z nich sÈ
dystrybuowane z pakietami JDK, inne sÈ darmowe, a jeszcze inne to wersje komercyjne (pïatne).
118
Rozdziaá 4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy
Opisane w tym rozdziale narzÚdzia do monitorowania naleĝÈ do grupy dystrybuowanych z pa-
kietami Oracle JDK, do grupy narzÚdzi darmowych lub teĝ do aplikacji typu open source. Ponadto
wszystkie prezentowane tu narzÚdzia dostÚpne sÈ dla systemów operacyjnych Windows, Linux oraz
Oracle Solaris (zwanego dalej Solaris).
Aby wïaĂciwie zrozumieÊ materiaï przedstawiony w tym rozdziale, pomocna bÚdzie wiedza na
temat najwaĝniejszych komponentów oraz gïównych operacji nowoczesnej maszyny wirtualnej
Javy. Informacje na temat Java HotSpot VM i jej komponentów zostaïy przedstawione w rozdziale 3.
Definicje
Zanim zagïÚbimy siÚ w szczegóïy dotyczÈce elementów, które naleĝy monitorowaÊ, przydatne
moĝe okazaÊ siÚ przypomnienie pojÚÊ „monitorowanie wydajnoĂci” oraz „profilowanie wydajnoĂci”
wprowadzonych na poczÈtku rozdziaïu 2. Monitorowanie wydajnoĂci (ang. performance monito-
ring) polega na nieinwazyjnym zbieraniu i obserwowaniu danych dotyczÈcych wydajnoĂci dziaïajÈ-
cej lub uruchomionej aplikacji. Jest to zazwyczaj dziaïanie typu prewencyjnego lub zapobiegawczego,
moĝe wiÚc byÊ przeprowadzane w Ărodowisku produkcyjnym, kwalifikacyjnym lub programi-
stycznym. Monitorowanie wydajnoĂci jest równieĝ pierwszym etapem reagowania w sytuacji,
kiedy interesariusze danej aplikacji zgïaszajÈ wystÚpowanie problemów z wydajnoĂciÈ, a nie za-
pewniajÈ przy tym wystarczajÈcych informacji lub wskazówek na temat potencjalnej przyczyny
takiego stanu rzeczy. W takim przypadku prawdopodobne jest, ĝe po fazie monitorowania wydaj-
noĂci nastÈpi faza profilowania wydajnoĂci. Monitorowanie wydajnoĂci pozwala równieĝ zidenty-
fikowaÊ lub wyizolowaÊ potencjalne problemy bez istotnego wpïywania na czasy reakcji oraz prze-
pustowoĂÊ aplikacji.
Z kolei profilowanie wydajnoĂci (ang. performance profiling) jest czynnoĂciÈ zbierania danych
dotyczÈcych wydajnoĂci dziaïajÈcej lub uruchomionej aplikacji, która to czynnoĂÊ moĝe wpïywaÊ
na przepustowoĂÊ lub reakcje aplikacji. Profilowanie wydajnoĂci jest z reguïy dziaïaniem reak-
cyjnym lub dziaïaniem, które ma stanowiÊ odpowiedě na problemy z wydajnoĂciÈ zgïaszane
przez zainteresowane osoby. Koncentruje siÚ ono zazwyczaj na wÚĝszym obszarze niĝ monitoro-
wanie wydajnoĂci. Profilowanie jest rzadko przeprowadzane w Ărodowiskach produkcyjnych. Naj-
czÚĂciej wykonywane jest w Ărodowisku kwalifikujÈcym, testujÈcym lub programistycznym i nie-
rzadko nastÚpuje po monitorowaniu wydajnoĂci.
W odróĝnieniu od monitorowania wydajnoĂci i profilowania wydajnoĂci, regulacja wydajnoĂci
(ang. performance tuning) polega na zmianie wartoĂci parametrów regulowanych, kodu ěródïowego
lub atrybutów konfiguracji w celu poprawy przepustowoĂci i reakcji. Regulacja wydajnoĂci czÚsto
nastÚpuje po monitorowaniu lub profilowaniu wydajnoĂci.
Odzyskiwanie pamiĊci
Monitorowanie procesów odzyskiwania pamiÚci JVM jest istotnym czynnikiem, poniewaĝ moĝe
mieÊ gïÚboki wpïyw na przepustowoĂÊ i opóěnienia aplikacji. Nowoczesne maszyny wirtualne Javy,
takie jak Java HotSpot VM (zwana dalej HotSpot VM), zapewniajÈ moĝliwoĂÊ obserwacji statystyk
odzyskiwania pamiÚci dla kaĝdego procesu odzyskiwania. Statystyki dostarczane sÈ w formie tek-
stowej, zapisywane bezpoĂrednio do pliku dziennika (ang. log file) lub publikowane w interfejsie
graficznym (GUI) systemu monitorujÈcego.
Podrozdziaï ten rozpoczyna siÚ od przedstawienia listy danych, które sÈ istotne dla procesu
odzyskiwania pamiÚci. NastÚpnie zaprezentowany zostaï zestaw opcji wiersza poleceñ HotSpot VM
Odzyskiwanie pamiĊci
119
sïuĝÈcy do raportowania statystyk odzyskiwania pamiÚci. Zamieszczono przy tym objaĂnienie zna-
czenia raportowanych danych. Dodatkowo przedstawione zostaïo narzÚdzie graficzne, które moĝna
wykorzystaÊ do analizy uzyskanych danych. I co najwaĝniejsze, znajduje siÚ tutaj równieĝ opis
konkretnych wzorców czy ukïadów danych, na które naleĝy zwracaÊ uwagÚ, oraz sugestie dotyczÈce
tego, kiedy trzeba wykonaÊ regulacjÚ mechanizmu odzyskiwania pamiÚci JVM.
Dane istotne dla procesu odzyskiwania pamiĊci
W statystykach procesu odzyskiwania pamiÚci istotne sÈ nastÚpujÈce dane:
stosowany mechanizm odzyskiwania pamiÚci;
rozmiar sterty Java;
rozmiary przestrzeni mïodego i starego pokolenia;
rozmiar przestrzeni staïego pokolenia;
czasy trwania procesów mniejszego odzyskiwania pamiÚci;
czÚstotliwoĂÊ uruchamiania procesu mniejszego odzyskiwania pamiÚci;
iloĂÊ przestrzeni odzyskiwanej w procesach mniejszego odzyskiwania pamiÚci;
czasy trwania procesów peïnego odzyskiwania pamiÚci;
czÚstotliwoĂÊ uruchamiania procesu peïnego odzyskiwania pamiÚci;
iloĂÊ przestrzeni odzyskiwanej w cyklach równoczesnego odzyskiwania pamiÚci;
zapeïnienie sterty Java przed procesem odzyskiwania pamiÚci i po nim;
zapeïnienie przestrzeni mïodego i starego pokolenia przed procesem odzyskiwania
pamiÚci i po nim;
zapeïnienie przestrzeni staïego pokolenia przed procesem odzyskiwania pamiÚci i po nim;
okreĂlenie, kiedy proces peïnego odzyskiwania pamiÚci wywoïywany jest przez zapeïnienie
przestrzeni starego pokolenia, a kiedy przez zapeïnienie przestrzeni staïego pokolenia;
ustalenie, kiedy aplikacja korzysta z wyraěnych wywoïañ metody System.gc().
Raportowanie danych procesu odzyskiwania pamiĊci
Raportowanie danych statystycznych dla procesów odzyskiwania pamiÚci nie stanowi duĝego
obciÈĝenia dla maszyny wirtualnej HotSpot. ObciÈĝenie to jest w rzeczywistoĂci tak znikome, ĝe
zaleca siÚ gromadzenie danych odzyskiwania nawet w Ărodowisku produkcyjnym. W tym punkcie
opisano kilka róĝnych opcji wiersza poleceñ HotSpot VM sïuĝÈcych do generowania statystyk
dziaïania mechanizmu odzyskiwania pamiÚci oraz objaĂniono znaczenie tych statystyk.
Zasadniczo istniejÈ dwa typy odzyskiwania pamiÚci: mniejsze odzyskiwanie pamiÚci (ang. minor
garbage collection), zwane równieĝ odzyskiwaniem pamiÚci z mïodego pokolenia (ang. young
generation garbage collection), oraz peïne odzyskiwanie pamiÚci (ang. full garbage collection), zwane
równieĝ gïównym odzyskiwaniem pamiÚci (ang. major garbage collection). Ogólnie rzecz biorÈc,
peïne odzyskiwanie pamiÚci obejmuje, oprócz usuwania obiektów „Ămieciowych”, takĝe kompak-
towanie przestrzeni starego i staïego pokolenia. Istnieje jednak kilka wyjÈtków od tej reguïy. W ma-
szynie wirtualnej HotSpot domyĂlnym zachowaniem przy peïnym odzyskiwaniu pamiÚci jest
usuwanie Ămieci z przestrzeni mïodego, starego i staïego pokolenia. Ponadto w tym procesie
kompaktowane sÈ przestrzenie starego i staïego pokolenia, a wszystkie ĝywe obiekty z mïodego
pokolenia sÈ promowane do starego pokolenia. Dlatego teĝ na koniec procesu peïnego odzyski-
120
Rozdziaá 4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy
wania pamiÚci przestrzeñ mïodego pokolenia jest pusta, a przestrzenie starego i mïodego pokolenia
sÈ skompaktowane i przechowujÈ jedynie ĝywe obiekty. Sposoby dziaïania kaĝdego z mechanizmów
odzyskiwania pamiÚci maszyny wirtualnej HotSpot zostaïy szczegóïowo opisane w rozdziale 3.
Jak juĝ wczeĂniej wspominaliĂmy, mniejsze odzyskiwanie pamiÚci uwalnia obszary pamiÚci
zajmowane przez nieosiÈgalne obiekty znajdujÈce siÚ w przestrzeni mïodego pokolenia. Z kolei
domyĂlnym zachowaniem dla peïnego odzyskiwania pamiÚci w HotSpot VM jest uwalnianie ob-
szarów pamiÚci zajmowanych przez nieosiÈgalne obiekty z przestrzeni mïodego, starego i staïego
pokolenia. Moĝna skonfigurowaÊ maszynÚ wirtualnÈ HotSpot tak, aby przy peïnym odzyskiwaniu
pamiÚci obiekty „Ămieciowe” z przestrzeni mïodego pokolenia nie byïy zbierane, zanim nie zo-
stanÈ zebrane obiekty „Ămieciowe” z przestrzeni starego pokolenia. Sïuĝy do tego opcja wiersza
poleceñ -XX:-ScavengeBeforeFullGC. Znak - umieszczony przed ScavengeBeforeFullGC oznacza
wyïÈczenie odzyskiwania pamiÚci w mïodym pokoleniu dla procesu peïnego odzyskiwania
pamiÚci. Z kolei zastosowanie znaku + przed tÈ opcjÈ oznaczaïoby wïÈczenie odzyskiwania pa-
miÚci w przestrzeni mïodego pokolenia dla procesu peïnego odzyskiwania pamiÚci. Jak juĝ pisali-
Ămy, domyĂlnym zachowaniem dla HotSpot VM jest wïÈczenie odzyskiwania w mïodym pokoleniu
dla peïnego odzyskiwania pamiÚci. Zalecane jest stosowanie ustawieñ domyĂlnych i niewyïÈczanie
przestrzeni mïodego pokolenia z procesu peïnego odzyskiwania. Zbieranie obiektów „Ămiecio-
wych” w przestrzeni mïodego pokolenia przed wykonaniem tej samej czynnoĂci dla przestrzeni
starego pokolenia zazwyczaj przysparza mniej pracy mechanizmowi odzyskiwania pamiÚci oraz po-
woduje, ĝe wiÚcej obiektów „Ămieciowych” jest usuwanych, poniewaĝ obiekty w przestrzeni sta-
rego pokolenia mogÈ posiadaÊ referencje do obiektów w przestrzeni mïodego pokolenia. JeĂli nie
zostanie przeprowadzone odzyskiwanie pamiÚci dla przestrzeni mïodego pokolenia, ĝaden obiekt
starego pokolenia, który posiada referencje do obiektów mïodego pokolenia, nie moĝe byÊ usuniÚty.
-XX:+PrintGCDetails
Mimo iĝ -verbose:gc jest najczÚĂciej stosowanÈ opcjÈ wiersza poleceñ dla raportowania statystyk
procesu odzyskiwania pamiÚci, opcja -XX:+PrintGCDetails dostarcza dodatkowych i bardziej istot-
nych informacji w tym zakresie. W tej podsekcji zaprezentowano przykïadowy listing z -XX:+PrintGC
´Details dla przepustowoĂciowego oraz równoczesnego mechanizmu odzyskiwania pamiÚci wraz
z wyjaĂnieniem dostarczonych danych. Opisane sÈ równieĝ pewne wzorce, których naleĝy szukaÊ
w listingu tej opcji.
Warto zwróciÊ uwagÚ, ĝe dodatkowe informacje dostarczane przez opcjÚ -XX:+PrintGCDetails
mogÈ róĝniÊ siÚ w zaleĝnoĂci od wersji maszyny wirtualnej HotSpot.
Poniĝej znajduje siÚ przykïad listingu dla opcji -XX:+PrintGCDetails przy przepustowoĂcio-
wym mechanizmie odzyskiwania pamiÚci w Java 6 Update 25. PrzepustowoĂciowy mechanizm
odzyskiwania pamiÚci moĝe byÊ wïÈczony za pomocÈ opcji -XX:+UseParallelGC lub -XX:+Use
´ParallelOldGC. Ukïad listingu zostaï podzielony na kilka wierszy w celu uzyskania lepszej przej-
rzystoĂci.
[GC
[PSYoungGen: 99952K- 14688K(109312K)]
422212K- 341136K(764672K), 0.0631991 secs]
[Times: user=0.83 sys=0.00, real=0.06 secs]
Oznaczenie GC wskazuje na proces mniejszego odzyskiwania pamiÚci. Fragment [PSYoungGen:
99952K 14688K(109312K)] dostarcza informacji na temat przestrzeni mïodego pokolenia. PSYoungGen
oznacza, ĝe stosowane odzyskiwanie dla mïodego pokolenia jest wielowÈtkowym procesem przepu-
stowoĂciowego mechanizmu odzyskiwania pamiÚci wïÈczonego opcjÈ wiersza poleceñ –XX:+Use
´ParallelGC lub automatycznie uruchomionego przez –XX:+UseParallelOldGC. Inne dostÚpne
Odzyskiwanie pamiĊci
121
mechanizmy odzyskiwania pamiÚci dla mïodego pokolenia to: ParNew, czyli wielowÈtkowy proces
odzyskiwania pamiÚci dla mïodego pokolenia stosowany przez równoczesny mechanizm odzyski-
wania pamiÚci starego pokolenia znany jako CMS, oraz DefNew, czyli jednowÈtkowy proces odzy-
skiwania pamiÚci dla mïodego pokolenia stosowany przez szeregowy mechanizm odzyskiwania pa-
miÚci, który jest uruchamiany opcjÈ wiersza poleceñ –XX:+UseSerialGC. Opcja -XX:+UseSerialGC
(DefNew) moĝe byÊ równieĝ stosowana w poïÈczeniu z równoczesnym mechanizmem odzyskiwania
pamiÚci starego pokolenia (CMS), co zapewnia jednowÈtkowe odzyskiwanie pamiÚci dla mïodego
pokolenia. Obecnie mechanizm odzyskiwania pamiÚci G1, nad którym nadal trwajÈ prace, nie
stosuje identyfikatora do identyfikacji danych wyjĂciowych w taki sposób, jak pozostaïe trzy me-
chanizmy odzyskiwania pamiÚci.
WartoĂÊ 99952K znajdujÈca siÚ po lewej stronie strzaïki - to zapeïnienie przestrzeni mïodego
pokolenia przed uruchomieniem procesu odzyskiwania pamiÚci. WartoĂÊ 14688K po prawej stronie
strzaïki - to zapeïnienie przestrzeni mïodego pokolenia po przeprowadzeniu procesu odzyski-
wania pamiÚci. Przestrzeñ mïodego pokolenia podzielona jest na przestrzeñ zwanÈ edenem oraz
dwie przestrzenie ocalaïych. Poniewaĝ po mniejszym odzyskiwaniu pamiÚci eden jest zawsze pusty,
14688K oznacza zapeïnienie przestrzeni ocalaïych. WartoĂÊ podana w nawiasach, czyli (109312K),
to caïkowity rozmiar (nie myliÊ z zapeïnieniem) przestrzeni mïodego pokolenia, na którÈ skïada
siÚ eden oraz dwie przestrzenie ocalaïych.
W nastÚpnym wierszu listingu znajdujÈ siÚ wartoĂci 422212K- 341136K(764672K), które dostar-
czajÈ informacji na temat wykorzystania sterty Java (ïÈczna zajÚtoĂÊ przestrzeni mïodego i starego
pokolenia) przed odzyskiwaniem pamiÚci i po nim. Ponadto znajduje siÚ tu informacja o rozmiarze
sterty Java, który jest równy sumie przestrzeni mïodego i starego pokolenia. WartoĂÊ 422212K po
lewej stronie strzaïki to zajÚtoĂÊ sterty Java przed uruchomieniem procesu odzyskiwania pamiÚci,
a wartoĂÊ 341136K po prawej stronie strzaïki to zajÚtoĂÊ sterty po przeprowadzeniu procesu odzy-
skiwania pamiÚci. UjÚta w nawiasach wartoĂÊ (764672K) to caïkowity rozmiar sterty Java.
KorzystajÈc z uzyskanych informacji na temat rozmiaru przestrzeni mïodego pokolenia oraz
rozmiaru sterty Java, moĝesz obliczyÊ rozmiar przestrzeni starego pokolenia. JeĂli przykïadowo
rozmiar sterty Java wynosi 764672K, a rozmiar przestrzeni mïodego pokolenia jest równy
109312K, to rozmiar przestrzeni starego pokolenia wynosi 764672K - 109312K = 655360K.
WartoĂÊ 0.0631991 secs okreĂla w sekundach czas trwania procesu odzyskiwania pamiÚci.
Kolejny wiersz listingu [Times: user=0.06 sys=0.00, real=0.06 secs] to informacja na temat
wykorzystania CPU oraz czasu, jaki upïynÈï. WartoĂÊ dla pola user to czas CPU wykorzystany przez
mechanizm odzyskiwania pamiÚci na wykonanie instrukcji poza systemem operacyjnym. W tym
przykïadzie mechanizm odzyskiwania pamiÚci wykorzystaï 0,06 s czasu uĝytkownika dla CPU.
WartoĂÊ dla pola sys to czas CPU wykorzystany przez system operacyjny na obsïugÚ mechanizmu
odzyskiwania pamiÚci. W naszym przykïadzie mechanizm odzyskiwania pamiÚci w ogóle nie
wykorzystaï czasu CPU na wykonanie instrukcji systemu operacyjnego. WartoĂÊ dla pola real to
podany w sekundach czas, jaki upïynÈï od momentu rozpoczÚcia do momentu zakoñczenia pro-
cesu odzyskiwania pamiÚci. W tym przypadku zajÚïo to 0,06 s. Czasy dla user, sys i real sÈ za-
okrÈglane do setnych sekundy.
W poniĝszym przykïadzie przedstawiono listing z opcji -XX:+PrintGCDetails dla procesu
peïnego odzyskiwania pamiÚci. Dla lepszej przejrzystoĂci listing zostaï podzielony na kilka wierszy.
[Full GC
[PSYoungGen: 11456K- 0K(110400K)]
[PSOldGen: 651536K- 58466K(655360K)]
662992K- 58466K(765760K)
[PSPermGen: 10191K- 10191K(22528K)],
1.1178951 secs]
[Times: user=1.01 sys=0.00, real=1.12 secs]
122
Rozdziaá 4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy
Nagïówek Full GC wskazuje, ĝe mamy do czynienia z peïnym odzyskiwaniem pamiÚci. [PSYoung
´Gen: 11456K- 0K(110400K)] oznacza to samo, co w przypadku opisanego wczeĂniej mniejszego
odzyskiwania pamiÚci.
Wiersz [PSOldGen: 651536K- 58466K(655360K)] dostarcza informacji na temat przestrzeni sta-
rego pokolenia. PSOldGen oznacza, ĝe stosowany mechanizm odzyskiwania pamiÚci dla starego
pokolenia jest wielowÈtkowym procesem przepustowoĂciowego mechanizmu odzyskiwania pamiÚci
wïÈczonego opcjÈ wiersza poleceñ XX:+UseParallelOldGC. WartoĂÊ 651536K po lewej stronie
strzaïki to zapeïnienie przestrzeni starego pokolenia przed uruchomieniem odzyskiwania pamiÚci,
a wartoĂÊ 58466K po prawej stronie strzaïki to zapeïnienie tej przestrzeni po zakoñczeniu procesu
odzyskiwania pamiÚci. UjÚta w nawiasach wartoĂÊ (655360K) to rozmiar przestrzeni starego po-
kolenia.
Wiersz 662992K- 58466K(765760K) informuje o wykorzystaniu sterty Java. Jest tu podane ïÈczne
zapeïnienie przestrzeni mïodego i starego pokolenia przed wykonaniem i po wykonaniu odzy-
skiwania pamiÚci. WartoĂÊ po prawej stronie strzaïki moĝe byÊ równieĝ traktowana jako iloĂÊ
ĝywych obiektów, które pozostaïy w aplikacji po przeprowadzeniu peïnego odzyskiwania pamiÚ-
ci. Posiadanie informacji o iloĂci ĝywych obiektów w aplikacji, szczególnie kiedy aplikacja jest
w stanie równowagi, jest istotne przy ustalaniu rozmiaru sterty Java maszyny wirtualnej oraz do-
stosowywaniu ustawieñ mechanizmu odzyskiwania pamiÚci w JVM.
Kolejny wiersz [PSPermGen: 10191K- 10191K(22528K)] zawiera dane dotyczÈce przestrzeni
staïego pokolenia. PSPermGen oznacza, ĝe stosowany mechanizm odzyskiwania pamiÚci dla staïego
pokolenia jest wielowÈtkowym procesem przepustowoĂciowego mechanizmu odzyskiwania pamiÚci
uruchomionego opcjÈ wiersza poleceñ -XX:+UseParallelGC lub -XX:+UseParallelOldGC. WartoĂÊ
10191K znajdujÈca siÚ po lewej stronie strzaïki okreĂla zapeïnienie przestrzeni staïego pokolenia
przed uruchomieniem procesu odzyskiwania pamiÚci, a wartoĂÊ 10191K znajdujÈca siÚ po prawej
stronie strzaïki to zapeïnienie tej przestrzeni po zakoñczeniu pracy przez mechanizm odzyski-
wania pamiÚci. UjÚta w nawiasach wartoĂÊ (22528K) to rozmiar przestrzeni staïego pokolenia.
W peïnym odzyskiwaniu pamiÚci istotne jest, by zwróciÊ uwagÚ na to, jaka czÚĂÊ stery jest zajÚta
przez przestrzenie starego i staïego pokolenia przed uruchomieniem mechanizmu odzyskiwania
pamiÚci. Powodem tego jest fakt, ĝe peïne odzyskiwanie pamiÚci moĝe byÊ uruchamiane w przy-
padku zbliĝania siÚ limitu zapeïnienia zarówno dla przestrzeni starego, jak i staïego pokolenia. Z na-
szego listingu wynika, ĝe zapeïnienie przestrzeni starego pokolenia przed odzyskiwaniem pamiÚci
(651536K) jest bliskie caïkowitemu rozmiarowi tej przestrzeni (655360K). Z kolei zapeïnienie prze-
strzeni staïego pokolenia przed odzyskiwaniem pamiÚci (10191K) nie jest nawet blisko caïkowi-
tego rozmiaru tej przestrzeni (22528K). StÈd teĝ wiemy, ĝe uruchomienie peïnego odzyskiwania pa-
miÚci zostaïo spowodowane osiÈgniÚciem limitu zapeïnienia przestrzeni starego pokolenia.
WartoĂÊ 1.1178951 secs okreĂla w sekundach czas trwania procesu odzyskiwania pamiÚci.
Wiersz [Times: user=1.01 sys=0.00, real=1.12 secs] dostarcza informacji na temat wyko-
rzystania CPU i czasu, jaki upïynÈï. Jego znaczenie jest takie samo, jak w przypadku opisanego
wczeĂniej procesu mniejszego odzyskiwania pamiÚci.
Przy zastosowaniu równoczesnego mechanizmu odzyskiwania pamiÚci (CMS) listing dla opcji
-XX:+PrintGCDetails nieco siÚ róĝni, szczególnie w przypadku raportowania danych dotyczÈcych
przewaĝnie-równoczesnego odzyskiwania pamiÚci dla starego pokolenia. Równoczesny mechanizm
odzyskiwania pamiÚci (CMS) uruchamiany jest opcjÈ wiersza poleceñ -XX:+UseConcMarkSweepGC.
Uruchamia on równieĝ automatycznie opcjÚ -XX:+UseParNewGC, czyli wielowÈtkowe odzyskiwanie
pamiÚci dla mïodego pokolenia. Poniĝej znajduje siÚ przykïad dla mniejszego odzyskiwania pa-
miÚci wykorzystujÈcego równoczesny mechanizm odzyskiwania pamiÚci CMS:
Odzyskiwanie pamiĊci
123
[GC
[ParNew: 2112K- 64K(2112K), 0.0837052 secs]
16103K- 15476K(773376K), 0.0838519 secs]
[Times: user=0.02 sys=0.00, real=0.08 secs]
Listing z mniejszego odzyskiwania pamiÚci dla równoczesnego mechanizmu odzyskiwania
pamiÚci jest zbliĝony do listingu z mniejszego odzyskiwania pamiÚci dla przepustowoĂciowego me-
chanizmu odzyskiwania pamiÚci. Aby zapewniÊ kompleksowoĂÊ informacji, zostaï on opisany poniĝej.
Nagïówek GC wskazuje, ĝe mamy do czynienia z mniejszym odzyskiwaniem pamiÚci. Wiersz
[ParNew: 2112K- 64K(2112K)] zawiera informacje na temat przestrzeni mïodego pokolenia. ParNew
wskazuje, ĝe stosowane odzyskiwanie pamiÚci dla mïodego pokolenia jest wielowÈtkowym pro-
cesem równoczesnego mechanizmu odzyskiwania pamiÚci CMS. JeĂli zostaïoby zdefiniowane uĝycie
z CMS szeregowego odzyskiwania pamiÚci dla mïodego pokolenia, mielibyĂmy oznaczenie DefNew.
WartoĂÊ 2112K znajdujÈca siÚ po lewej stronie strzaïki okreĂla zapeïnienie przestrzeni mïode-
go pokolenia przed uruchomieniem mechanizmu odzyskiwania pamiÚci, a wartoĂÊ 64K po prawej
stronie strzaïki oznacza zapeïnienie tej przestrzeni po zakoñczeniu dziaïania mechanizmu odzy-
skiwania pamiÚci. Przestrzeñ mïodego pokolenia dzieli siÚ na eden oraz dwie przestrzenie ocala-
ïych. Poniewaĝ eden zawsze pozostaje pusty po mniejszym odzyskiwaniu pamiÚci, 64K oznacza za-
peïnienie przestrzeni ocalaïych. UjÚta w nawiasach wartoĂÊ (2112K) jest rozmiarem przestrzeni
mïodego pokolenia, na którÈ skïada siÚ eden i dwie przestrzenie ocalaïych. 0.0837052 secs to wy-
raĝony w sekundach czas, jaki byï potrzebny na usuniÚcie nieosiÈgalnych obiektów z przestrzeni
mïodego pokolenia.
Kolejny wiersz listingu — 16103K- 15476K(773376K) — przedstawia dane na temat wykorzy-
stania sterty Java (ïÈczne zapeïnienie przestrzenie mïodego i starego pokolenia) przed wykonaniem
i po wykonaniu procesu odzyskiwania pamiÚci. Ponadto dostarcza równieĝ informacji dotyczÈcej
rozmiaru sterty Java, która jest równa sumie rozmiarów przestrzeni mïodego i starego pokolenia.
WartoĂÊ 16103K znajdujÈca siÚ po lewej stronie strzaïki oznacza zapeïnienie sterty Java przed uru-
chomieniem mechanizmu odzyskiwania pamiÚci, a wartoĂÊ 15476K po prawej stronie strzaïki ozna-
cza zapeïnienie sterty po zakoñczeniu dziaïania mechanizmu odzyskiwania pamiÚci. UjÚta w na-
wiasach wartoĂÊ (773376K) stanowi caïkowity rozmiar sterty Java.
KorzystajÈc z uzyskanych informacji na temat rozmiaru przestrz
Pobierz darmowy fragment (pdf)