Wydajność Javy

advertisement
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: [email protected]
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 treci
Przedmowa .................................................................................................. 13
Przedmowa .................................................................................................. 15
Wstp .......................................................................................................... 17
Podzikowania ............................................................................................. 21
O autorach ................................................................................................... 23
1. Strategie, podejcia i metodologie ........................................................... 25
Zasadnicze czynniki .................................................................................................................... 26
Dwa podejcia: z góry do dou oraz z dou do góry ................................................................... 29
Metoda z góry do dou ............................................................................................................ 29
Metoda z dou do góry ............................................................................................................ 30
Wybór odpowiedniej platformy i ocena systemu ...................................................................... 31
Wybór waciwej architektury procesora ............................................................................... 32
Ocena wydajnoci systemu ..................................................................................................... 33
Bibliografia ................................................................................................................................... 34
2. Monitorowanie wydajnoci 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 narzdzi wiersza polece ................................................................................... 45
Kup książkę
Poleć książkę
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 pamici ............................................................................................................... 51
Monitorowanie wykorzystania pamici w systemach Windows ........................................... 52
Monitorowanie wykorzystania pamici w systemach Solaris ............................................... 53
Monitorowanie wykorzystania pamici 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 gorcych blokad .................................................................................................... 58
Monitorowanie mimowolnego przeczania kontekstu ......................................................... 58
Monitorowanie migracji wtkó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
Wzgldy dotyczce poprawy wydajnoci aplikacji ................................................................ 62
Wykorzystanie we/wy dysku ....................................................................................................... 63
Dodatkowe narzdzia wiersza polece ...................................................................................... 65
Monitorowanie wykorzystania CPU w systemach z procesorami SPARC T ........................... 66
Bibliografia ................................................................................................................................... 69
3. Przegld 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
Udostpnianie danych klas ..................................................................................................... 81
Interpreter ............................................................................................................................... 82
Obsuga wyjtków ................................................................................................................... 84
Synchronizacja ......................................................................................................................... 84
Zarzdzanie wtkami ............................................................................................................... 85
Zarzdzanie stert C++ ......................................................................................................... 89
Java Native Interface ............................................................................................................... 90
Obsuga bdów krytycznych VM .......................................................................................... 91
Mechanizmy odzyskiwania pamici HotSpot VM .................................................................... 93
Pokoleniowy mechanizm odzyskiwania pamici ................................................................... 93
Mode pokolenie ...................................................................................................................... 95
Szybka alokacja ........................................................................................................................ 97
Mechanizmy odzyskiwania pamici, czyli osiokowi w oby dano ..................................... 97
Kup książkę
Poleć książkę
Spis treci
7
Szeregowy mechanizm odzyskiwania pamici ...................................................................... 98
Równolegy mechanizm odzyskiwania pamici: przepustowo ma znaczenie! ................. 99
Przewanie-równoczesny mechanizm odzyskiwania pamici: opó
nienie ma znaczenie! .... 99
Mechanizm odzyskiwania pamici najpierw-kosz: nastpca CMS .................................... 102
Porównanie ............................................................................................................................ 102
Generowanie pracy mechanizmu odzyskiwania pamici .................................................... 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 zaleny .................................................................................... 108
Nadchodzce poprawki ......................................................................................................... 110
Regulacja adaptacyjna HotSpot VM ........................................................................................ 111
Wartoci domylne dla Java 1.4.2 ......................................................................................... 111
Ergonomiczne wartoci domylne dla 5. wersji Javy .......................................................... 111
Zaktualizowane domylne wartoci ergonomiczne dla Java 6 Update 18 .......................... 113
Adaptacyjne ustalanie rozmiaru sterty Java ......................................................................... 115
Nie tylko ergonomia .............................................................................................................. 115
Bibliografia ................................................................................................................................. 116
4. Monitorowanie wydajnoci maszyny wirtualnej Javy ............................. 117
Definicje .................................................................................................................................... 118
Odzyskiwanie pamici .............................................................................................................. 118
Dane istotne dla procesu odzyskiwania pamici ................................................................. 119
Raportowanie danych procesu odzyskiwania pamici ........................................................ 119
Analiza offline danych z procesów odzyskiwania pamici .................................................. 129
Narzdzia 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 zwizane z profilowaniem ..................................................................................... 159
Pojcia zwizane z programem Oracle Solaris Studio Performance Analyzer .................. 159
Pojcia zwizane z programem NetBeans Profiler ............................................................. 160
Oracle Solaris Studio Performance Analyzer .......................................................................... 161
Obsugiwane platformy ......................................................................................................... 161
Pobieranie i instalacja programu Oracle Solaris Studio Performance Analyzer ............... 162
Przechwytywanie profilu Oracle Solaris Studio Performance Analyzer ............................ 163
Przegldanie zebranej próby ................................................................................................ 166
Prezentacja danych ................................................................................................................ 174
Kup książkę
Poleć książkę
8
Wydajno Javy
Filtrowanie danych profilu ................................................................................................... 177
Narzdzie wiersza polece er_print ..................................................................................... 178
Program NetBeans Profiler ....................................................................................................... 185
Obsugiwane platformy ......................................................................................................... 186
Pobieranie i instalacja NetBeans Profiler ............................................................................ 186
Rozpoczynanie sesji profilowania metod ............................................................................. 186
Controls, czyli przyciski sterujce ........................................................................................ 193
Status ...................................................................................................................................... 193
Profiling Results, czyli rezultaty profilowania ..................................................................... 193
Saved Snapshots, czyli zapisane zrzuty ekranu ................................................................... 193
View, czyli podgld ............................................................................................................... 194
Basic Telemetry, czyli podstawowa telemetria .................................................................... 194
Przegldanie aktualnych rezultatów ..................................................................................... 195
Wykonywanie zrzutu ekranu rezultatów ............................................................................. 195
Rozpoczynanie sesji profilowania pamici .......................................................................... 196
Przegldanie biecych rezultatów ...................................................................................... 198
Wykonywanie zrzutu ekranu rezultatów ............................................................................. 200
Izolowanie wycieków pamici .............................................................................................. 201
Analiza zrzutów sterty ........................................................................................................... 201
Bibliografia ................................................................................................................................. 202
6. Profilowanie aplikacji Java — porady i sztuczki ...................................... 203
Potencjalne obszary poprawy wydajnoci ................................................................................ 203
Wykorzystanie CPU przez jdro lub system ........................................................................... 204
Rywalizacja o blokady ............................................................................................................... 212
Uycie sowa kluczowego volatile ............................................................................................ 221
Zmiana rozmiaru struktur danych ............................................................................................ 222
Zmiana rozmiaru klas StringBuilder lub StringBuffer ........................................................ 223
Zmiana rozmiaru klas Java Collections ................................................................................ 226
Zwikszanie wspóczynnika równolegoci .............................................................................. 230
Wysokie wykorzystanie CPU .................................................................................................... 232
Inne uyteczne wskazówki dotyczce programu Performance Analyzer .............................. 233
Bibliografia ................................................................................................................................. 235
7. Regulacja JVM krok po kroku ................................................................. 237
Metodologia ............................................................................................................................... 238
Zaoenia ................................................................................................................................ 240
Wymagania dotyczce infrastruktury testowania ................................................................ 240
Wymagania systemowe aplikacji .............................................................................................. 241
Dostpno ............................................................................................................................ 241
Zarzdzalno ........................................................................................................................ 241
Przepustowo ....................................................................................................................... 241
Opó
nienie i czas reakcji ...................................................................................................... 242
Zuycie pamici ..................................................................................................................... 242
Czas uruchamiania ................................................................................................................ 242
Ranking wymaga systemowych .............................................................................................. 242
Wybór modelu wdroenia JVM ................................................................................................ 243
Model wdroenia pojedynczej instancji JVM ...................................................................... 243
Kup książkę
Poleć książkę
Spis treci
9
Model wdroenia 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 pamici ..................................................................................... 246
Podstawy regulowania mechanizmu odzyskiwania pamici ................................................... 246
Atrybuty wydajnoci .............................................................................................................. 246
Podstawowe zasady ............................................................................................................... 247
Opcje wiersza polece oraz rejestrowanie zdarze
dla mechanizmu odzyskiwania pamici ............................................................................. 247
Okrelanie zuycia pamici ...................................................................................................... 251
Ograniczenia .......................................................................................................................... 251
Ukad sterty HotSpot VM ..................................................................................................... 252
Punkt pocztkowy rozmiaru sterty ....................................................................................... 254
Obliczanie rozmiaru ywych danych ................................................................................... 256
Konfiguracja pocztkowego rozmiaru sterty ........................................................................ 257
Dodatkowe uwagi .................................................................................................................. 259
Regulowanie opó
nienia/czasu reakcji ..................................................................................... 259
Przesanki ............................................................................................................................... 260
Precyzyjna regulacja rozmiaru przestrzeni modego pokolenia ......................................... 261
Precyzyjna regulacja rozmiaru przestrzeni starego pokolenia ........................................... 264
Precyzyjna regulacja opó
nie dla równoczesnego mechanizmu
odzyskiwania pamici ......................................................................................................... 267
Objanienie przestrzeni ocalaych ........................................................................................ 269
Objanienie progu zatrudnienia ........................................................................................... 271
Monitorowanie progu zatrudnienia ...................................................................................... 272
Ustalanie rozmiaru przestrzeni ocalaych ............................................................................ 274
Bezporednio wywoywane procesy odzyskiwania pamici ............................................... 280
Równoczesne odzyskiwanie pamici dla staego pokolenia ............................................... 281
Regulacja czasu przestojów CMS ......................................................................................... 282
Kolejne czynnoci .................................................................................................................. 283
Regulowanie przepustowoci aplikacji .................................................................................... 283
Regulacja przepustowoci dla CMS ..................................................................................... 284
Regulacja przepustowociowego mechanizmu odzyskiwania pamici .............................. 285
Regulacja rozmiaru przestrzeni ocalaych ........................................................................... 287
Regulacja liczby wtków przepustowociowego mechanizmu odzyskiwania pamici ..... 290
Wdroenie na systemach NUMA ......................................................................................... 291
Kolejne czynnoci .................................................................................................................. 291
Przypadki skrajne ...................................................................................................................... 291
Dodatkowe opcje wiersza polece do regulowania wydajnoci ............................................. 292
Najnowsze i najwiksze optymalizacje ................................................................................ 292
Analiza ucieczki ..................................................................................................................... 292
Blokada przecigana .............................................................................................................. 293
Due strony pamici ............................................................................................................. 294
Bibliografia ................................................................................................................................. 296
Kup książkę
Poleć książkę
10
Wydajno Javy
8. Testy porównawcze aplikacji Java ......................................................... 297
Wyzwania dotyczce benchmarków ......................................................................................... 298
Rozgrzewka ............................................................................................................................ 298
Odzyskiwanie pamici .......................................................................................................... 300
Zastosowanie metod Time interfejsów Java API ................................................................. 301
Usuwanie martwego kodu w wyniku optymalizacji ............................................................ 302
Wplatanie ............................................................................................................................... 307
Deoptymalizacja .................................................................................................................... 311
Porady dotyczce przygotowywania mikrobenchmarków .................................................. 315
Projektowanie eksperymentów ................................................................................................. 317
Zastosowanie metod statystycznych ......................................................................................... 318
Obliczanie redniej ................................................................................................................ 318
Obliczanie odchylenia standardowego ................................................................................. 319
Okrelanie przedziau ufnoci .............................................................................................. 319
Zastosowanie testów hipotezy .............................................................................................. 321
Porady dotyczce stosowania metod statystycznych ........................................................... 323
Literatura ................................................................................................................................... 324
Bibliografia ................................................................................................................................. 324
9. Testy porównawcze aplikacji wielowarstwowych .................................. 325
Wyzwania dotyczce benchmarków ......................................................................................... 326
Rozwaania na temat benchmarków typu enterprise .............................................................. 328
Definiowanie systemu testowego (SUT) .............................................................................. 328
Przygotowywanie mikrobenchmarków ................................................................................ 329
Definiowanie modelu interakcji z uytkownikiem .............................................................. 329
Definiowanie metryk wydajnoci ......................................................................................... 333
Skalowanie benchmarku ....................................................................................................... 337
Weryfikacja za pomoc prawa Little’a ................................................................................. 338
Czas na zastanowienie ........................................................................................................... 340
Analiza skalowalnoci ............................................................................................................ 343
Przeprowadzanie benchmarku ............................................................................................. 343
Monitorowanie serwera aplikacji ............................................................................................. 347
Monitorowanie za pomoc serwera aplikacji GlassFish ..................................................... 347
Monitorowanie podsystemów ............................................................................................... 352
Wydajno systemów zewntrznych .................................................................................... 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 wydajnoci kontenera webowego ........................................... 369
Tryb deweloperski i tryb produkcyjny kontenera ............................................................... 370
Meneder bezpieczestwa .................................................................................................... 371
Kup książkę
Poleć książkę
Spis treci
11
Regulacje JVM ....................................................................................................................... 371
HTTP service i kontener webowy ........................................................................................ 373
Nasuchiwacz HTTP ............................................................................................................. 373
Najlepsze praktyki ..................................................................................................................... 386
Najlepsze praktyki dla serwletów i stron JSP ...................................................................... 386
Buforowanie pamici podrcznej zawartoci ...................................................................... 395
Trwao sesji ......................................................................................................................... 400
Buforowanie plików serwera HTTP ..................................................................................... 401
Bibliografia ................................................................................................................................. 405
11. Wydajno usug internetowych ............................................................. 407
Wydajno XML ........................................................................................................................ 408
Cykl przetwarzania XML ...................................................................................................... 408
Parsowanie/unmarshalling .................................................................................................... 409
Dostp .................................................................................................................................... 412
Modyfikacja ............................................................................................................................ 412
Serializacja/marshalling ........................................................................................................ 413
Weryfikacja ................................................................................................................................ 413
Rozwizywanie encji zewntrznych ......................................................................................... 415
Czciowe przetwarzanie dokumentów XML ......................................................................... 417
Wybór odpowiedniego interfejsu API ..................................................................................... 420
Stos modelowej implementacji JAX-WS ................................................................................. 423
Testy porównawcze usug internetowych ................................................................................ 425
Czynniki, które wpywaj na wydajno usugi internetowej ................................................. 428
Wpyw rozmiaru wiadomoci ............................................................................................... 428
Charakterystyki wydajnoci rónych typów schematów ..................................................... 430
Implementacja punktu kocowego ...................................................................................... 433
Wydajno programu obsugi ............................................................................................... 434
Najlepsze praktyki dotyczce wydajnoci ................................................................................ 436
Przetwarzanie binarnego bloku danych ............................................................................... 436
Praca z dokumentami XML .................................................................................................. 441
Wykorzystanie MTOM do wysyania dokumentów XML w postaci zaczników ............ 441
Korzystanie z interfejsu provider ......................................................................................... 444
Fast Infoset ............................................................................................................................ 446
Kompresja HTTP .................................................................................................................. 448
Wydajno klienta usugi 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 podrczna drugiego poziomu .................................................................................. 453
Monitorowanie i regulacja kontenera EJB .............................................................................. 456
Pula wtków ........................................................................................................................... 457
Pule beanów i pamici podrczne beanów .......................................................................... 459
Pami podrczna sesji EclipseLink .................................................................................... 464
Poziom izolacji transakcji .......................................................................................................... 465
Kup książkę
Poleć książkę
12
Wydajno Javy
Najlepsze praktyki stosowane w Enterprise Java Beans ......................................................... 466
Benchmark do testów porównawczych EJB wykorzystany w przykadach ....................... 466
EJB 2.1 ................................................................................................................................... 466
EJB 3.0 ................................................................................................................................... 478
Najlepsze praktyki stosowane w Java Persistence ................................................................... 481
Zapytania jzyka zapyta JPA ............................................................................................... 482
Pami podrczna wyników zapyta .................................................................................... 484
FetchType .............................................................................................................................. 485
Tworzenie puli pocze ....................................................................................................... 486
Aktualizacje zbiorcze ............................................................................................................. 488
Wybierz waciw strategi blokowania bazy danych ......................................................... 489
Odczyty bez transakcji .......................................................................................................... 490
Dziedziczenie ........................................................................................................................ 490
Bibliografia ................................................................................................................................. 490
A. Wybrane opcje wiersza polece HotSpot VM .......................................... 493
Skorowidz ................................................................................................. 511
Kup książkę
Poleć książkę
4
Monitorowanie
wydajnoci maszyny
wirtualnej Javy
W tym rozdziale opisane zostay elementy, które powinny by monitorowane na poziomie stosu
programowego maszyny wirtualnej Javy (ang. Java Virtual Machine — JVM). Ponadto przedstawione zostay narzdzia suce do monitorowania JVM oraz najbardziej typowe, powtarzajce
si wzorce, na które naley zwraca uwag. Szczegóy dotyczce podejmowania na podstawie zebranych informacji decyzji dotyczcych regulacji JVM znajdziesz w rozdziale 7. Na kocu rozdziau zamieszczony zosta równie krótki podrozdzia na temat monitorowania aplikacji.
Monitorowanie maszyny wirtualnej Javy jest czynnoci, która zawsze powinna by wykonywana z aplikacj typu produkcyjnego. Poniewa JVM jest kluczowym elementem stosu programowego, powinna by monitorowana w tym samym stopniu, co sama aplikacja oraz system operacyjny. Analiza informacji uzyskanych w procesie monitorowania maszyny wirtualnej Javy pozwala
stwierdzi, kiedy niezbdna jest regulacja JVM. Taka regulacja maszyny wirtualnej Javy powinna
by przeprowadzana za kadym razem, kiedy zmienia si wersja JVM, dochodzi do zmian w systemie operacyjnym (zmiana konfiguracji lub wersji), zmienia si wersja aplikacji lub wykonywane s
aktualizacje oraz gdy dochodzi do znaczcych zmian w zakresie danych wejciowych dla aplikacji.
Do zmiany danych wejciowych aplikacji moe dochodzi do czsto w wielu aplikacjach Java,
co moe mie wpyw na wydajno JVM. Dlatego te monitorowanie maszyny wirtualnej Javy
jest tak istotn czynnoci.
Istnieje kilka podstawowych obszarów JVM, które powinny by monitorowane. Nale do
nich procesy odzyskiwania pamici, dziaanie kompilatora JIT oraz adowanie klas. Dostpnych
jest wiele narzdzi umoliwiajcych monitorowanie maszyny wirtualnej Javy. Niektóre z nich s
dystrybuowane z pakietami JDK, inne s darmowe, a jeszcze inne to wersje komercyjne (patne).
Kup książkę
Poleć książkę
118
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Opisane w tym rozdziale narzdzia do monitorowania nale do grupy dystrybuowanych z pakietami Oracle JDK, do grupy narzdzi darmowych lub te do aplikacji typu open source. Ponadto
wszystkie prezentowane tu narzdzia dostpne s dla systemów operacyjnych Windows, Linux oraz
Oracle Solaris (zwanego dalej Solaris).
Aby waciwie zrozumie materia przedstawiony w tym rozdziale, pomocna bdzie wiedza na
temat najwaniejszych komponentów oraz gównych operacji nowoczesnej maszyny wirtualnej
Javy. Informacje na temat Java HotSpot VM i jej komponentów zostay przedstawione w rozdziale 3.
Definicje
Zanim zagbimy si w szczegóy dotyczce elementów, które naley monitorowa, przydatne
moe okaza si przypomnienie poj „monitorowanie wydajnoci” oraz „profilowanie wydajnoci”
wprowadzonych na pocztku rozdziau 2. Monitorowanie wydajnoci (ang. performance monitoring) polega na nieinwazyjnym zbieraniu i obserwowaniu danych dotyczcych wydajnoci dziaajcej lub uruchomionej aplikacji. Jest to zazwyczaj dziaanie typu prewencyjnego lub zapobiegawczego,
moe wic by przeprowadzane w rodowisku produkcyjnym, kwalifikacyjnym lub programistycznym. Monitorowanie wydajnoci jest równie pierwszym etapem reagowania w sytuacji,
kiedy interesariusze danej aplikacji zgaszaj wystpowanie problemów z wydajnoci, a nie zapewniaj przy tym wystarczajcych informacji lub wskazówek na temat potencjalnej przyczyny
takiego stanu rzeczy. W takim przypadku prawdopodobne jest, e po fazie monitorowania wydajnoci nastpi faza profilowania wydajnoci. Monitorowanie wydajnoci pozwala równie zidentyfikowa lub wyizolowa potencjalne problemy bez istotnego wpywania na czasy reakcji oraz przepustowo aplikacji.
Z kolei profilowanie wydajnoci (ang. performance profiling) jest czynnoci zbierania danych
dotyczcych wydajnoci dziaajcej lub uruchomionej aplikacji, która to czynno moe wpywa
na przepustowo lub reakcje aplikacji. Profilowanie wydajnoci jest z reguy dziaaniem reakcyjnym lub dziaaniem, które ma stanowi odpowied
na problemy z wydajnoci zgaszane
przez zainteresowane osoby. Koncentruje si ono zazwyczaj na wszym obszarze ni monitorowanie wydajnoci. Profilowanie jest rzadko przeprowadzane w rodowiskach produkcyjnych. Najczciej wykonywane jest w rodowisku kwalifikujcym, testujcym lub programistycznym i nierzadko nastpuje po monitorowaniu wydajnoci.
W odrónieniu od monitorowania wydajnoci i profilowania wydajnoci, regulacja wydajnoci
(ang. performance tuning) polega na zmianie wartoci parametrów regulowanych, kodu ródowego
lub atrybutów konfiguracji w celu poprawy przepustowoci i reakcji. Regulacja wydajnoci czsto
nastpuje po monitorowaniu lub profilowaniu wydajnoci.
Odzyskiwanie pamici
Monitorowanie procesów odzyskiwania pamici JVM jest istotnym czynnikiem, poniewa moe
mie gboki wpyw na przepustowo i opó
nienia aplikacji. Nowoczesne maszyny wirtualne Javy,
takie jak Java HotSpot VM (zwana dalej HotSpot VM), zapewniaj moliwo obserwacji statystyk
odzyskiwania pamici dla kadego procesu odzyskiwania. Statystyki dostarczane s w formie tekstowej, zapisywane bezporednio do pliku dziennika (ang. log file) lub publikowane w interfejsie
graficznym (GUI) systemu monitorujcego.
Podrozdzia ten rozpoczyna si od przedstawienia listy danych, które s istotne dla procesu
odzyskiwania pamici. Nastpnie zaprezentowany zosta zestaw opcji wiersza polece HotSpot VM
Kup książkę
Poleć książkę
Odzyskiwanie pamici
119
sucy do raportowania statystyk odzyskiwania pamici. Zamieszczono przy tym objanienie znaczenia raportowanych danych. Dodatkowo przedstawione zostao narzdzie graficzne, które mona
wykorzysta do analizy uzyskanych danych. I co najwaniejsze, znajduje si tutaj równie opis
konkretnych wzorców czy ukadów danych, na które naley zwraca uwag, oraz sugestie dotyczce
tego, kiedy trzeba wykona regulacj mechanizmu odzyskiwania pamici JVM.
Dane istotne dla procesu odzyskiwania pamici
W statystykach procesu odzyskiwania pamici istotne s nastpujce dane:
„ stosowany mechanizm odzyskiwania pamici;
„
„
„
„
„
„
„
„
„
„
„
rozmiar sterty Java;
rozmiary przestrzeni modego i starego pokolenia;
rozmiar przestrzeni staego pokolenia;
czasy trwania procesów mniejszego odzyskiwania pamici;
czstotliwo uruchamiania procesu mniejszego odzyskiwania pamici;
ilo przestrzeni odzyskiwanej w procesach mniejszego odzyskiwania pamici;
czasy trwania procesów penego odzyskiwania pamici;
czstotliwo uruchamiania procesu penego odzyskiwania pamici;
ilo przestrzeni odzyskiwanej w cyklach równoczesnego odzyskiwania pamici;
zapenienie sterty Java przed procesem odzyskiwania pamici i po nim;
zapenienie przestrzeni modego i starego pokolenia przed procesem odzyskiwania
pamici i po nim;
„
zapenienie przestrzeni staego pokolenia przed procesem odzyskiwania pamici i po nim;
okrelenie, kiedy proces penego odzyskiwania pamici wywoywany jest przez zapenienie
przestrzeni starego pokolenia, a kiedy przez zapenienie przestrzeni staego pokolenia;
„
ustalenie, kiedy aplikacja korzysta z wyra
nych wywoa metody System.gc().
„
Raportowanie danych procesu odzyskiwania pamici
Raportowanie danych statystycznych dla procesów odzyskiwania pamici nie stanowi duego
obcienia dla maszyny wirtualnej HotSpot. Obcienie to jest w rzeczywistoci tak znikome, e
zaleca si gromadzenie danych odzyskiwania nawet w rodowisku produkcyjnym. W tym punkcie
opisano kilka rónych opcji wiersza polece HotSpot VM sucych do generowania statystyk
dziaania mechanizmu odzyskiwania pamici oraz objaniono znaczenie tych statystyk.
Zasadniczo istniej dwa typy odzyskiwania pamici: mniejsze odzyskiwanie pamici (ang. minor
garbage collection), zwane równie odzyskiwaniem pamici z modego pokolenia (ang. young
generation garbage collection), oraz pene odzyskiwanie pamici (ang. full garbage collection), zwane
równie gównym odzyskiwaniem pamici (ang. major garbage collection). Ogólnie rzecz biorc,
pene odzyskiwanie pamici obejmuje, oprócz usuwania obiektów „mieciowych”, take kompaktowanie przestrzeni starego i staego pokolenia. Istnieje jednak kilka wyjtków od tej reguy. W maszynie wirtualnej HotSpot domylnym zachowaniem przy penym odzyskiwaniu pamici jest
usuwanie mieci z przestrzeni modego, starego i staego pokolenia. Ponadto w tym procesie
kompaktowane s przestrzenie starego i staego pokolenia, a wszystkie ywe obiekty z modego
pokolenia s promowane do starego pokolenia. Dlatego te na koniec procesu penego odzyski-
Kup książkę
Poleć książkę
120
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
wania pamici przestrze modego pokolenia jest pusta, a przestrzenie starego i modego pokolenia
s skompaktowane i przechowuj jedynie ywe obiekty. Sposoby dziaania kadego z mechanizmów
odzyskiwania pamici maszyny wirtualnej HotSpot zostay szczegóowo opisane w rozdziale 3.
Jak ju wczeniej wspominalimy, mniejsze odzyskiwanie pamici uwalnia obszary pamici
zajmowane przez nieosigalne obiekty znajdujce si w przestrzeni modego pokolenia. Z kolei
domylnym zachowaniem dla penego odzyskiwania pamici w HotSpot VM jest uwalnianie obszarów pamici zajmowanych przez nieosigalne obiekty z przestrzeni modego, starego i staego
pokolenia. Mona skonfigurowa maszyn wirtualn HotSpot tak, aby przy penym odzyskiwaniu
pamici obiekty „mieciowe” z przestrzeni modego pokolenia nie byy zbierane, zanim nie zostan zebrane obiekty „mieciowe” z przestrzeni starego pokolenia. Suy do tego opcja wiersza
polece -XX:-ScavengeBeforeFullGC. Znak - umieszczony przed ScavengeBeforeFullGC oznacza
wyczenie odzyskiwania pamici w modym pokoleniu dla procesu penego odzyskiwania
pamici. Z kolei zastosowanie znaku + przed t opcj oznaczaoby wczenie odzyskiwania pamici w przestrzeni modego pokolenia dla procesu penego odzyskiwania pamici. Jak ju pisalimy, domylnym zachowaniem dla HotSpot VM jest wczenie odzyskiwania w modym pokoleniu
dla penego odzyskiwania pamici. Zalecane jest stosowanie ustawie domylnych i niewyczanie
przestrzeni modego pokolenia z procesu penego odzyskiwania. Zbieranie obiektów „mieciowych” w przestrzeni modego pokolenia przed wykonaniem tej samej czynnoci dla przestrzeni
starego pokolenia zazwyczaj przysparza mniej pracy mechanizmowi odzyskiwania pamici oraz powoduje, e wicej obiektów „mieciowych” jest usuwanych, poniewa obiekty w przestrzeni starego pokolenia mog posiada referencje do obiektów w przestrzeni modego pokolenia. Jeli nie
zostanie przeprowadzone odzyskiwanie pamici dla przestrzeni modego pokolenia, aden obiekt
starego pokolenia, który posiada referencje do obiektów modego pokolenia, nie moe by usunity.
-XX:+PrintGCDetails
Mimo i -verbose:gc jest najczciej stosowan opcj wiersza polece dla raportowania statystyk
procesu odzyskiwania pamici, opcja -XX:+PrintGCDetails dostarcza dodatkowych i bardziej istotnych informacji w tym zakresie. W tej podsekcji zaprezentowano przykadowy listing z -XX:+PrintGC
´Details dla przepustowociowego oraz równoczesnego mechanizmu odzyskiwania pamici wraz
z wyjanieniem dostarczonych danych. Opisane s równie pewne wzorce, których naley szuka
w listingu tej opcji.
Warto zwróci uwag, e dodatkowe informacje dostarczane przez opcj -XX:+PrintGCDetails
mog róni si w zalenoci od wersji maszyny wirtualnej HotSpot.
Poniej znajduje si przykad listingu dla opcji -XX:+PrintGCDetails przy przepustowociowym mechanizmie odzyskiwania pamici w Java 6 Update 25. Przepustowociowy mechanizm
odzyskiwania pamici moe by wczony za pomoc opcji -XX:+UseParallelGC lub -XX:+Use
´ParallelOldGC. Ukad listingu zosta podzielony na kilka wierszy w celu uzyskania lepszej przejrzystoci.
[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 pamici. Fragment [PSYoungGen:
99952K>14688K(109312K)] dostarcza informacji na temat przestrzeni modego pokolenia. PSYoungGen
oznacza, e stosowane odzyskiwanie dla modego pokolenia jest wielowtkowym procesem przepustowociowego mechanizmu odzyskiwania pamici wczonego opcj wiersza polece –XX:+Use
´ParallelGC lub automatycznie uruchomionego przez –XX:+UseParallelOldGC. Inne dostpne
Kup książkę
Poleć książkę
Odzyskiwanie pamici
121
mechanizmy odzyskiwania pamici dla modego pokolenia to: ParNew, czyli wielowtkowy proces
odzyskiwania pamici dla modego pokolenia stosowany przez równoczesny mechanizm odzyskiwania pamici starego pokolenia znany jako CMS, oraz DefNew, czyli jednowtkowy proces odzyskiwania pamici dla modego pokolenia stosowany przez szeregowy mechanizm odzyskiwania pamici, który jest uruchamiany opcj wiersza polece –XX:+UseSerialGC. Opcja -XX:+UseSerialGC
(DefNew) moe by równie stosowana w poczeniu z równoczesnym mechanizmem odzyskiwania
pamici starego pokolenia (CMS), co zapewnia jednowtkowe odzyskiwanie pamici dla modego
pokolenia. Obecnie mechanizm odzyskiwania pamici G1, nad którym nadal trwaj prace, nie
stosuje identyfikatora do identyfikacji danych wyjciowych w taki sposób, jak pozostae trzy mechanizmy odzyskiwania pamici.
Warto 99952K znajdujca si po lewej stronie strzaki -> to zapenienie przestrzeni modego
pokolenia przed uruchomieniem procesu odzyskiwania pamici. Warto 14688K po prawej stronie
strzaki -> to zapenienie przestrzeni modego pokolenia po przeprowadzeniu procesu odzyskiwania pamici. Przestrze modego pokolenia podzielona jest na przestrze zwan edenem oraz
dwie przestrzenie ocalaych. Poniewa po mniejszym odzyskiwaniu pamici eden jest zawsze pusty,
14688K oznacza zapenienie przestrzeni ocalaych. Warto podana w nawiasach, czyli (109312K),
to cakowity rozmiar (nie myli z zapenieniem) przestrzeni modego pokolenia, na któr skada
si eden oraz dwie przestrzenie ocalaych.
W nastpnym wierszu listingu znajduj si wartoci 422212K->341136K(764672K), które dostarczaj informacji na temat wykorzystania sterty Java (czna zajto przestrzeni modego i starego
pokolenia) przed odzyskiwaniem pamici i po nim. Ponadto znajduje si tu informacja o rozmiarze
sterty Java, który jest równy sumie przestrzeni modego i starego pokolenia. Warto 422212K po
lewej stronie strzaki to zajto sterty Java przed uruchomieniem procesu odzyskiwania pamici,
a warto 341136K po prawej stronie strzaki to zajto sterty po przeprowadzeniu procesu odzyskiwania pamici. Ujta w nawiasach warto (764672K) to cakowity rozmiar sterty Java.
Korzystajc z uzyskanych informacji na temat rozmiaru przestrzeni modego pokolenia oraz
rozmiaru sterty Java, moesz obliczy rozmiar przestrzeni starego pokolenia. Jeli przykadowo
rozmiar sterty Java wynosi 764672K, a rozmiar przestrzeni modego pokolenia jest równy
109312K, to rozmiar przestrzeni starego pokolenia wynosi 764672K - 109312K = 655360K.
Warto 0.0631991 secs okrela w sekundach czas trwania procesu odzyskiwania pamici.
Kolejny wiersz listingu [Times: user=0.06 sys=0.00, real=0.06 secs] to informacja na temat
wykorzystania CPU oraz czasu, jaki upyn. Warto dla pola user to czas CPU wykorzystany przez
mechanizm odzyskiwania pamici na wykonanie instrukcji poza systemem operacyjnym. W tym
przykadzie mechanizm odzyskiwania pamici wykorzysta 0,06 s czasu uytkownika dla CPU.
Warto dla pola sys to czas CPU wykorzystany przez system operacyjny na obsug mechanizmu
odzyskiwania pamici. W naszym przykadzie mechanizm odzyskiwania pamici w ogóle nie
wykorzysta czasu CPU na wykonanie instrukcji systemu operacyjnego. Warto dla pola real to
podany w sekundach czas, jaki upyn od momentu rozpoczcia do momentu zakoczenia procesu odzyskiwania pamici. W tym przypadku zajo to 0,06 s. Czasy dla user, sys i real s zaokrglane do setnych sekundy.
W poniszym przykadzie przedstawiono listing z opcji -XX:+PrintGCDetails dla procesu
penego odzyskiwania pamici. Dla lepszej przejrzystoci 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]
Kup książkę
Poleć książkę
122
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Nagówek Full GC wskazuje, e mamy do czynienia z penym odzyskiwaniem pamici. [PSYoung
´Gen: 11456K->0K(110400K)] oznacza to samo, co w przypadku opisanego wczeniej mniejszego
odzyskiwania pamici.
Wiersz [PSOldGen: 651536K->58466K(655360K)] dostarcza informacji na temat przestrzeni starego pokolenia. PSOldGen oznacza, e stosowany mechanizm odzyskiwania pamici dla starego
pokolenia jest wielowtkowym procesem przepustowociowego mechanizmu odzyskiwania pamici
wczonego opcj wiersza polece XX:+UseParallelOldGC. Warto 651536K po lewej stronie
strzaki to zapenienie przestrzeni starego pokolenia przed uruchomieniem odzyskiwania pamici,
a warto 58466K po prawej stronie strzaki to zapenienie tej przestrzeni po zakoczeniu procesu
odzyskiwania pamici. Ujta w nawiasach warto (655360K) to rozmiar przestrzeni starego pokolenia.
Wiersz 662992K->58466K(765760K) informuje o wykorzystaniu sterty Java. Jest tu podane czne
zapenienie przestrzeni modego i starego pokolenia przed wykonaniem i po wykonaniu odzyskiwania pamici. Warto po prawej stronie strzaki moe by równie traktowana jako ilo
ywych obiektów, które pozostay w aplikacji po przeprowadzeniu penego odzyskiwania pamici. Posiadanie informacji o iloci ywych obiektów w aplikacji, szczególnie kiedy aplikacja jest
w stanie równowagi, jest istotne przy ustalaniu rozmiaru sterty Java maszyny wirtualnej oraz dostosowywaniu ustawie mechanizmu odzyskiwania pamici w JVM.
Kolejny wiersz [PSPermGen: 10191K->10191K(22528K)] zawiera dane dotyczce przestrzeni
staego pokolenia. PSPermGen oznacza, e stosowany mechanizm odzyskiwania pamici dla staego
pokolenia jest wielowtkowym procesem przepustowociowego mechanizmu odzyskiwania pamici
uruchomionego opcj wiersza polece -XX:+UseParallelGC lub -XX:+UseParallelOldGC. Warto
10191K znajdujca si po lewej stronie strzaki okrela zapenienie przestrzeni staego pokolenia
przed uruchomieniem procesu odzyskiwania pamici, a warto 10191K znajdujca si po prawej
stronie strzaki to zapenienie tej przestrzeni po zakoczeniu pracy przez mechanizm odzyskiwania pamici. Ujta w nawiasach warto (22528K) to rozmiar przestrzeni staego pokolenia.
W penym odzyskiwaniu pamici istotne jest, by zwróci uwag na to, jaka cz stery jest zajta
przez przestrzenie starego i staego pokolenia przed uruchomieniem mechanizmu odzyskiwania
pamici. Powodem tego jest fakt, e pene odzyskiwanie pamici moe by uruchamiane w przypadku zbliania si limitu zapenienia zarówno dla przestrzeni starego, jak i staego pokolenia. Z naszego listingu wynika, e zapenienie przestrzeni starego pokolenia przed odzyskiwaniem pamici
(651536K) jest bliskie cakowitemu rozmiarowi tej przestrzeni (655360K). Z kolei zapenienie przestrzeni staego pokolenia przed odzyskiwaniem pamici (10191K) nie jest nawet blisko cakowitego rozmiaru tej przestrzeni (22528K). Std te wiemy, e uruchomienie penego odzyskiwania pamici zostao spowodowane osigniciem limitu zapenienia przestrzeni starego pokolenia.
Warto 1.1178951 secs okrela w sekundach czas trwania procesu odzyskiwania pamici.
Wiersz [Times: user=1.01 sys=0.00, real=1.12 secs] dostarcza informacji na temat wykorzystania CPU i czasu, jaki upyn. Jego znaczenie jest takie samo, jak w przypadku opisanego
wczeniej procesu mniejszego odzyskiwania pamici.
Przy zastosowaniu równoczesnego mechanizmu odzyskiwania pamici (CMS) listing dla opcji
-XX:+PrintGCDetails nieco si róni, szczególnie w przypadku raportowania danych dotyczcych
przewanie-równoczesnego odzyskiwania pamici dla starego pokolenia. Równoczesny mechanizm
odzyskiwania pamici (CMS) uruchamiany jest opcj wiersza polece -XX:+UseConcMarkSweepGC.
Uruchamia on równie automatycznie opcj -XX:+UseParNewGC, czyli wielowtkowe odzyskiwanie
pamici dla modego pokolenia. Poniej znajduje si przykad dla mniejszego odzyskiwania pamici wykorzystujcego równoczesny mechanizm odzyskiwania pamici CMS:
Kup książkę
Poleć książkę
Odzyskiwanie pamici
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 pamici dla równoczesnego mechanizmu odzyskiwania
pamici jest zbliony do listingu z mniejszego odzyskiwania pamici dla przepustowociowego mechanizmu odzyskiwania pamici. Aby zapewni kompleksowo informacji, zosta on opisany poniej.
Nagówek GC wskazuje, e mamy do czynienia z mniejszym odzyskiwaniem pamici. Wiersz
[ParNew: 2112K->64K(2112K)] zawiera informacje na temat przestrzeni modego pokolenia. ParNew
wskazuje, e stosowane odzyskiwanie pamici dla modego pokolenia jest wielowtkowym procesem równoczesnego mechanizmu odzyskiwania pamici CMS. Jeli zostaoby zdefiniowane uycie
z CMS szeregowego odzyskiwania pamici dla modego pokolenia, mielibymy oznaczenie DefNew.
Warto 2112K znajdujca si po lewej stronie strzaki okrela zapenienie przestrzeni modego pokolenia przed uruchomieniem mechanizmu odzyskiwania pamici, a warto 64K po prawej
stronie strzaki oznacza zapenienie tej przestrzeni po zakoczeniu dziaania mechanizmu odzyskiwania pamici. Przestrze modego pokolenia dzieli si na eden oraz dwie przestrzenie ocalaych. Poniewa eden zawsze pozostaje pusty po mniejszym odzyskiwaniu pamici, 64K oznacza zapenienie przestrzeni ocalaych. Ujta w nawiasach warto (2112K) jest rozmiarem przestrzeni
modego pokolenia, na któr skada si eden i dwie przestrzenie ocalaych. 0.0837052 secs to wyraony w sekundach czas, jaki by potrzebny na usunicie nieosigalnych obiektów z przestrzeni
modego pokolenia.
Kolejny wiersz listingu — 16103K->15476K(773376K) — przedstawia dane na temat wykorzystania sterty Java (czne zapenienie przestrzenie modego i starego pokolenia) przed wykonaniem
i po wykonaniu procesu odzyskiwania pamici. Ponadto dostarcza równie informacji dotyczcej
rozmiaru sterty Java, która jest równa sumie rozmiarów przestrzeni modego i starego pokolenia.
Warto 16103K znajdujca si po lewej stronie strzaki oznacza zapenienie sterty Java przed uruchomieniem mechanizmu odzyskiwania pamici, a warto 15476K po prawej stronie strzaki oznacza zapenienie sterty po zakoczeniu dziaania mechanizmu odzyskiwania pamici. Ujta w nawiasach warto (773376K) stanowi cakowity rozmiar sterty Java.
Korzystajc z uzyskanych informacji na temat rozmiaru przestrzeni modego pokolenia oraz
rozmiaru sterty Java, moesz obliczy rozmiar przestrzeni starego pokolenia. Jeli przykadowo
rozmiar sterty Java wynosi 773376K, a rozmiar przestrzeni modego pokolenia jest równy 2112K,
to rozmiar przestrzeni starego pokolenia wynosi 773376K - 2112K = 771264K.
0.0838519 secs oznacza wyraony w sekundach czas trwania procesu mniejszego odzyskiwania
pamici, wcznie z usuwaniem „mieciowych” obiektów z przestrzeni modego pokolenia i promowaniem obiektów do przestrzeni starego pokolenia oraz kocowymi procesami oczyszczania.
W wierszu [Times: user=0.02 sys=0.00, real=0.08 secs] znajduj si informacje na temat
wykorzystania CPU oraz czasu, jaki upyn. Warto dla pola user to czas CPU wykorzystany
przez mechanizm odzyskiwania pamici na wykonanie instrukcji poza systemem operacyjnym.
W tym przykadzie mechanizm odzyskiwania pamici wykorzysta 0,02 s czasu uytkownika dla
CPU. Warto dla pola sys to czas CPU wykorzystany przez system operacyjny na obsug mechanizmu odzyskiwania pamici. W naszym przykadzie mechanizm odzyskiwania pamici w ogóle nie
wykorzysta czasu CPU na wykonanie instrukcji systemu operacyjnego. Warto dla pola real to
podany w sekundach czas, jaki upyn od momentu rozpoczcia do momentu zakoczenia procesu odzyskiwania pamici. W tym przypadku zajo to 0,08 s. Czasy dla user, sys i real s zaokrglane do setnych sekundy.
Jak pewnie wiesz z opisu mechanizmu CMS zamieszczonego w rozdziale 3., istnieje cykl
przewanie-równoczesnego odzyskiwania pamici, który moe by wykorzystywany w starym
Kup książkę
Poleć książkę
124
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
pokoleniu. Opcja -XX:+PrintGCDetails raportuje równie aktywno odzyskiwania pamici dla kadego cyklu równoczesnego odzyskiwania pamici. W poniszym przykadzie przedstawiono listing
z odzyskiwania pamici, który raportuje cay cykl równoczesnego odzyskiwania pamici. Aktywno równoczesnego odzyskiwania pamici jest przeplatana z procesami mniejszego odzyskiwania
pamici, aby wykaza, e procesy mniejszego odzyskiwania pamici mog wystpi podczas cyklu
równoczesnego odzyskiwania pamici. Dla uzyskania lepszej przejrzystoci dane dotyczce równoczesnego odzyskiwania pamici zostay oznaczone wytuszczonym drukiem. Pamitaj równie, e listing z opcji -XX:+PrintGCDetails dla mechanizmu CMS moe róni si w zalenoci od wersji JVM.
[GC
[1 CMS-initial-mark: 13991K(773376K)]
14103K(773376K), 0.0023781 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-mark-start]
[GC
[ParNew: 2077K->63K(2112K), 0.0126205 secs]
17552K->15855K(773376K), 0.0127482 secs]
[Times: user=0.01 sys=0.00, real=0.01 secs]
[CMS-concurrent-mark: 0.267/0.374 secs]
[Times: user=4.72 sys=0.01, real=0.37 secs]
[GC
[ParNew: 2111K->64K(2112K), 0.0190851 secs]
17903K->16154K(773376K), 0.0191903 secs]
[Times: user=0.01 sys=0.00, real=0.02 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.044/0.064 secs]
[Times: user=0.11 sys=0.00, real=0.06 secs]
[CMS-concurrent-abortable-preclean-start]
[CMS-concurrent-abortable-clean] 0.031/0.044 secs]
[Times: user=0.09 sys=0.00, real=0.04 secs]
[GC
[YG occupancy: 1515 K (2112K)
[Rescan (parallel) , 0.0108373 secs]
[weak refs processing, 0.0000186 secs]
[1 CMS-remark: 16090K(20288K)]
17242K(773376K), 0.0210460 secs]
[Times: user=0.01 sys=0.00, real=0.02 secs]
[GC
[ParNew: 2112K->63K(2112K), 0.0716116 secs]
18177K->17382K(773376K), 0.0718204 secs]
[Times: user=0.02 sys=0.00, real=0.07 secs]
[CMS-concurrent-sweep-start]
[GC
[ParNew: 2111K->63K(2112K), 0.0830392 secs]
19363K->18757K(773376K), 0.0832943 secs]
[Times: user=0.02 sys=0.00, real=0.08 secs]
[GC
[ParNew: 2111K->0K(2112K), 0.0035190 secs]
17527K->15479K(773376K), 0.0036052 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-sweep: 0.291/0.662 secs]
[Times: user=0.28 sys=0.01, real=0.66 secs]
[GC
[ParNew: 2048K->0K(2112K), 0.0013347 secs]
17527K->15479K(773376K), 0.0014231 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-reset-start]
Kup książkę
Poleć książkę
Odzyskiwanie pamici
125
[CMS-concurrent-reset: 0.016/0.016 secs]
[Times: user=0.01 sys=0.00, real=0.02 secs]
[GC
[ParNew: 2048K->1K(2112K), 0.0013936 secs]
17527K->15479K(773376K), 0.0014814 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
Cykl CMS rozpoczyna si przestojem dla fazy znaku pocztkujcego (ang. initial mark) i koczy
po wykonaniu fazy równoczesnego resetu (ang. concurrent reset). W powyszym listingu kada
z faz cyklu CMS zostaa zaznaczona wytuszczonym drukiem i rozpoczyna si od CMS-initial-mark,
a koczy na CMS-concurrent-reset. Pozycja CMS-concurrent-mark oznacza zakoczenie fazy równoczesnego znakowania. Z kolei pozycja CMS-concurrent-sweep wskazuje na zakoczenie fazy równoczesnego zamiatania. Pozycje CMS-concurrent-preclean oraz CMS-concurrent-abortable-preclean
okrelaj zadania, które mog by wykonywane równoczenie w ramach przygotowa do fazy
ponownego zaznaczania (ang. remark phase) oznaczonej jako CMS-remark. Faza zamiatania oznaczona
CMS-concurrent-sweep jest faz, w której uwalniana jest przestrze zajmowana przez obiekty zaznaczone jako nieosigalne. Kocow faz wskazuje pozycja CMS-concurrent-reset. Jest to faza
przygotowania do rozpoczcia kolejnego cyklu równoczesnego mechanizmu odzyskiwania pamici.
Znak inicjujcy to z reguy relatywnie krótki przestój w stosunku do czasu, jaki jest potrzebny na wykonanie procesu mniejszego odzyskiwania pamici. Czas, jaki jest niezbdny na wykonanie faz równoczesnych (równoczesnego zaznaczania, równoczesnego czyszczenia wstpnego
oraz równoczesnego zamiatania), moe by relatywnie dugi (tak jak w powyszym przykadzie)
w porównaniu do przestoju dla mniejszego odzyskiwania pamici, jednak w trakcie wykonywania faz równoczesnych wtki aplikacji Java nie s zatrzymywane. Dugo przestoju dla fazy ponownego zaznaczania jest zalena od charakterystyki aplikacji (np. wysoki wspóczynnik modyfikacji
obiektów moe wydua czas przestoju) oraz od czasu, jaki upyn od momentu przeprowadzenia
mniejszego odzyskiwania pamici (dua liczba obiektów w przestrzeni modego pokolenia moe
wyduy przestój).
Wzorcem, na który powiniene zwróci uwag w tym listingu, jest stopie redukcji zapenienia
przestrzeni starego pokolenia podczas cyklu CMS. Przyjrze si powiniene szczególnie temu, w jaki
sposób spada zapenienie sterty Java pomidzy rozpoczciem a zakoczeniem fazy równoczesnego
zamiatania CMS, co w listingu oznaczone zostao odpowiednio pozycjami CMS-concurrent-sweepstart oraz CMS-concurrent-sweep. Zapenienie sterty Java moesz obserwowa, ledzc procesy
mniejszego odzyskiwania pamici. Dlatego te powiniene zwraca uwag na mniejsze odzyskiwania pamici pomidzy rozpoczciem a zakoczeniem fazy równoczesnego zamiatania CMS. Jeli
w tym przedziale nastpuje niewielki spadek zapenienia sterty Java, to albo zostao usunitych
niewiele obiektów (co oznacza, e cykle odzyskiwania pamici CMS odnajduj niewiele nieosigalnych obiektów do usunicia, wic marnuj wykorzystanie CPU), albo liczba obiektów promowanych do starego pokolenia jest równa lub wysza ni wspóczynnik, z jakim faza równoczesnego zamiatania CMS jest w stanie je usuwa. Kady z tych dwóch powyszych przypadków
stanowi istotne wskazanie, e powinna zosta przeprowadzona regulacja maszyny wirtualnej
Javy. Wicej informacji dotyczcych regulacji mechanizmu odzyskiwania pamici CMS znajdziesz
w rozdziale 7.
Kolejnym artefaktem, który naley monitorowa przy korzystaniu z CMS, jest dystrybucja
zatrudnienia obiektów (ang. tenuring distribution) wczana opcj wiersza polece -XX:+Print
´TenuringDistribution. Dystrybucja zatrudnienia to histogram przedstawiajcy wiek obiektów
w przestrzeniach ocalaych modego pokolenia. Kiedy wiek obiektu przekroczy okrelony próg zatrudnienia (ang. tenuring threshold), jest promowany z modego do starego pokolenia. Próg zatrudnienia oraz sposób monitorowania dystrybucji zatrudnienia wraz ze wskazówkami dotycz-
Kup książkę
Poleć książkę
126
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
cymi elementów, na które naley zwraca uwag, zostay opisane w punktach „Objanienie progu zatrudnienia” i „Monitorowanie progu zatrudnienia”, w rozdziale 7.
Jeli obiekty s zbyt szybko promowane do starego pokolenia, a CMS nie jest w stanie zapewni
odpowiedniej iloci wolnej przestrzeni w stosunku do liczby obiektów promowanych z modego
do starego pokolenia, prowadzi to do wyczerpania dostpnej przestrzeni starego pokolenia. Sytuacja taka okrelana jest jako niewydolno trybu równoczesnego (ang. concurrent mode failure).
Niewydolno trybu równoczesnego moe równie wystpi, kiedy przestrze starego pokolenia
zostanie pofragmentowana do tego stopnia, e nie bdzie w niej ju odpowiednio duego miejsca na
przyjcie obiektu promowanego z przestrzeni modego pokolenia. Opcja -XX:+PrintGCDetails
raportuje niewydolno trybu równoczesnego w listingu z odzyskiwania pamici, podajc informacj tekstow (concurrent mode failure). Kiedy wystpuje niewydolno trybu równoczesnego,
przeprowadzane jest odzyskiwanie pamici w przestrzeni starego pokolenia w celu odzyskania
wolnej przestrzeni. Przeprowadzane jest równie kompaktowanie starego pokolenia, aby wyeliminowa fragmentacj. Caa ta operacja wymaga zatrzymania wtków aplikacji Java i moe wymaga do duej iloci czasu. Dlatego te, jeli zaobserwujesz powtarzajce si przypadki niewydolnoci
trybu równoczesnego, powiniene wykona regulacj JVM wedug wskazówek zamieszczonych
w rozdziale 7., szczególnie tych, które dotycz dostrajania aplikacji w celu osignicia maych
opó
nie.
Znaczniki daty i czasu
Maszyna wirtualna HotSpot posiada opcje wiersza polece umoliwiajce doczenie znaczników
daty i czasu w kadym raporcie dotyczcym odzyskiwania pamici. Opcja wiersza polece -XX:+Print
´GCTimeStamps drukuje znacznik czasu bdcy liczb sekund, które upyny od momentu uruchomienia JVM. Znacznik ten zamieszczany jest dla kadego procesu odzyskiwania pamici. W poniszym przykadzie przedstawiono listing dla mniejszego odzyskiwania pamici z opcji -XX:+Print
´GCTimeStamps w poczeniu z opcj -XX:+PrintGCDetails i przepustowociowym mechanizmem
odzyskiwania pamici. Listing zosta podzielony na kilka wierszy w celu uzyskania lepszej przejrzystoci.
77.233: [GC
[PSYoungGen: 99952K->14688K(109312K)]
422212K->341136K(764672K), 0.0631991 secs]
[Times: user=0.83 sys=0.00, real=0.06 secs]
Zwró uwag, e listing dla opcji -XX:+PrintGCDetails jest poprzedzony znacznikiem czasu
reprezentujcym liczb sekund, które upyny od momentu uruchomienia JVM. Listing dla penego odzyskiwania pamici równie zawiera prefiks ze znacznikiem czasu. Znacznik ten jest dodawany take w przypadku stosowania równoczesnego mechanizmu odzyskiwania pamici.
Od czasu ukazania si Java 6 Update 4 dostpna jest opcja wiersza polece -XX:+PrintGCDate
´Stamps. Wstawia ona znacznik daty i czasu zgodny z norm ISO 860. Data i czas podawane s
w formie YYYY-MM-DD-T-HH-MM-SS.mmm-TZ, gdzie:
„
YYYY to czterocyfrowy format roku;
„
MM to dwucyfrowe okrelenie miesica, wartoci jednocyfrowe poprzedzane s cyfr 0;
„
DD to dwucyfrowe okrelenie dnia miesica, wartoci jednocyfrowe poprzedzane s cyfr 0;
„
T jest znacznikiem informujcym, e po jego lewej stronie znajduje si data, a po prawej
„
okrelenie czasu dnia;
HH to dwucyfrowe okrelenie godziny, wartoci jednocyfrowe poprzedzane s cyfr 0;
MM to dwucyfrowe okrelenie minuty, wartoci jednocyfrowe poprzedzane s cyfr 0;
„
Kup książkę
Poleć książkę
Odzyskiwanie pamici
„
SS to dwucyfrowe okrelenie sekundy, wartoci jednocyfrowe poprzedzane s cyfr 0;
„
mmm to trzycyfrowe okrelenie milisekundy, wartoci jednocyfrowe i dwucyfrowe
poprzedzane s odpowiednio cyframi 00 oraz 0;
„
TZ oznacza przesunicie strefy czasowej wzgldem czasu uniwersalnego GMT.
127
Mimo e listing zawiera informacje na temat przesunicia strefy czasowej wzgldem czasu GMT,
to data i czas dnia nie s podawane wedug GMT, tylko dostosowywane do czasu lokalnego. Poniszy
listing wykorzystuje opcj -XX:+PrintGCDateStamps wraz z opcj -XX:+PrintGCDetails przy zastosowaniu przepustowociowego mechanizmu odzyskiwania pamici. Listing zosta podzielony
na kilka wierszy w celu uzyskania lepszej przejrzystoci.
2010-11-21T09:57:10.518-0500:[GC
[PSYoungGen: 99952K->14688K(109312K)]
422212K->341136K(764672K), 0.0631991 secs]
[Times: user=0.83 sys=0.00, real=0.06 secs]
Przy penym odzyskiwaniu pamici dla przepustowociowego mechanizmu odzyskiwania równie dostpny jest przy zastosowaniu opcji -XX:+PrintGCDateStamps prefiks zawierajcy znacznik
daty i czasu. Ponadto znaczniki daty i czasu drukowane s take przy korzystaniu z równoczesnego
mechanizmu odzyskiwania pamici.
Uycie znacznika daty i (lub) czasu umoliwia zmierzenie czasu trwania zarówno procesu
mniejszego, jak i penego odzyskiwania pamici cznie z czstotliwoci uruchamiania tych
procesów. Na podstawie daty i czasu moesz obliczy oczekiwan czstotliwo przeprowadzania
mniejszego i penego odzyskiwania pamici. Jeli czasy trwania lub czstotliwoci uruchamiania
procesów odzyskiwania pamici przekraczaj dopuszczalne normy dla aplikacji, powiniene rozway regulacj JVM wedug wskazówek zamieszczonych w rozdziale 7.
-Xloggc
Opcja wiersza polece HotSpot VM -Xloggc:<nazwa_pliku> uatwia przeprowadzenie analizy
offline statystyk odzyskiwania pamici dziki bezporedniemu zapisaniu danych z raportu do pliku.
Parametr <nazwa_pliku> pozwala zdefiniowa dowoln nazw dla pliku, w którym chcesz przechowywa dane dotyczce procesów odzyskiwania pamici. Analiza offline tych danych moe dotyczy szerokiego przedziau czasu, co umoliwia identyfikacj wzorców ksztatowania si okrelonych statystyk bez koniecznoci obserwacji danych na bieco przy uruchomionej aplikacji.
Przy zastosowaniu opcji -XX:+PrintGCDetails w kombinacji z -Xloggc:<nazwa_pliku> listing jest
automatycznie poprzedzany znacznikiem czasu nawet bez koniecznoci okrelania opcji -XX:+
´PrintGCTimeStamps. Znacznik czasu jest drukowany w ten sam sposób jak w przypadku -XX:+Print
´GCTimeStamps. Poniej znajduje si przykad dla opcji -Xloggc:<nazwa_pliku> w poczeniu z opcj
-XX:+PrintGCDetails dla przepustowociowego mechanizmu odzyskiwania pamici. Listing zosta
podzielony na kilka wierszy w celu uzyskania lepszej przejrzystoci.
77.233: [GC
[PSYoungGen: 99952K->14688K(109312K)]
422212K->341136K(764672K), 0.0631991 secs]
[Times: user=0.83 sys=0.00, real=0.06 secs]
Poniewa opcja -Xloggc docza do listingu znacznik czasu automatycznie, atwo mona okreli,
kiedy przeprowadzane s procesy mniejszego i penego odzyskiwania. Ponadto moesz równie
obliczy czstotliwo uruchamiania tych procesów. Na podstawie daty i czasu moesz obliczy
oczekiwan czstotliwo przeprowadzania mniejszego i penego odzyskiwania pamici. Jeli czasy
trwania lub czstotliwoci uruchamiania procesów odzyskiwania pamici przekraczaj dopusz-
Kup książkę
Poleć książkę
128
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
czalne normy dla aplikacji, powiniene rozway regulacj JVM wedug wskazówek zamieszczonych
w rozdziale 7.
Czas zatrzymania i czas równoczesny aplikacji
HotSpot VM moe dostarcza informacji na temat iloci czasu, przez jaki aplikacja dziaa pomidzy
operacjami punktów bezpieczestwa, oraz iloci czasu, przez jaki HotSpot VM blokuje wykonywanie
wtków Java. Su do tego opcje wiersza polece -XX:+PrintGCApplicationConcurrentTime oraz
-XX:+PrintGCApplicationStoppedTime. Obserwacja operacji punktów bezpieczestwa za pomoc tych
dwóch opcji moe dostarczy informacji, które mog by uyteczne dla zrozumienia i ilociowego
okrelenia wpywu opó
nie generowanych przez JVM. Moe to równie pomóc w zdefiniowaniu,
czy konkretne opó
nienie wynika z zachowania JVM spowodowanego operacj punktu bezpieczestwa, czy jest zwizane z dziaaniem aplikacji.
Wskazówka
Operacje punktów bezpieczestwa zostay opisane bardziej szczegóowo w rozdziale 3.
Poniej znajduje si przykad zastosowania opcji -XX:+PrintGCApplicationConcurrentTime
oraz -XX:+PrintGCApplicationStoppedTime dla -XX:+PrintGCDetails:
Application time: 0.5291524 seconds
[GC
[ParNew: 3968K->64K(4032K), 0.0460948 secs]
7451K->6186K(32704K), 0.0462350 secs]
[Times: user=0.01 sys=0.00, real=0.05 secs]
Total time for which application threads were stopped: 0.0468229 seconds
Application time: 0.5279058 seconds
[GC
[ParNew: 4032K->64K(4032K), 0.0447854 secs]
10154K->8648K(32704K), 0.0449156 secs]
[Times: user=0.01 sys=0.00, real=0.04 secs]
Total time for which application threads were stopped: 0.0453124 seconds
Application time: 0.9063706 seconds
[GC
[ParNew: 4032K->64K(4032K), 0.0464574 secs]
12616K->11187K(32704K), 0.0465921 secs]
[Times: user=0.01 sys=0.00, real=0.05 secs]
Total time for which application threads were stopped: 0.0470484 seconds
Z listingu mona wyczyta, e aplikacja dziaaa w przyblieniu od 0,53 do 0,91 sekundy
z przestojami na mniejsze odzyskiwanie pamici w przyblieniu od 0,045 do 0,047. Stanowi to
okoo 5 – 8% obcienia na procesy mniejszego odzyskiwania pamici.
Zwró te uwag, e nie ma adnych dodatkowych punktów bezpieczestwa pomidzy kadym
z procesów mniejszego odzyskiwania pamici. Gdyby punkty bezpieczestwa wystpiy pomidzy
procesami odzyskiwania pamici, w listingu pojawiyby si nastpujce informacje dla kadego
z tych punktów bezpieczestwa: czas aplikacji (Application time:) oraz cakowity czas zatrzymania
wtków aplikacji (Total time for which application threads were stopped:).
Wyra
ne procesy odzyskiwania pamici
Wyra
ne procesy odzyskiwania pamici mog by atwo zidentyfikowane na listingu. Listing z odzyskiwania pamici zawiera informacj tekstow wskazujc, e pene odzyskiwanie pamici jest
Kup książkę
Poleć książkę
Odzyskiwanie pamici
129
wynikiem wyra
nego wywoania metody System.gc(). W poniszym przykadzie przedstawiono listing z opcji wiersza polece -XX:+PrintGCDetails dla procesu penego odzyskiwania pamici
wywoanego metod System.gc(). Listing zosta podzielony na kilka wierszy w celu uzyskania
lepszej przejrzystoci.
[Full GC (System)
[PSYoungGen: 99608K->0K(114688K)]
[PSOldGen: 317110K->191711K(655360K)]
416718K->191711K(770048K)
[PSPermGen: 15639K->15639K(22528K)],
0.0279619 secs]
[Times: user=0.02 sys=0.00, real=0.02 secs]
Zwró uwag, e pozycja (System) poprzedzona zostaa oznaczeniem Full GC. Wskazuje to, e
mamy do czynienia z procesem penego odzyskiwania pamici wywoanym przez System.gc().
Jeli odnajdziesz wyra
ny proces odzyskiwania pamici w logach odzyskiwania pamici, powiniene
odszuka przyczyn jego zastosowania, a nastpnie zdecydowa, czy wywoanie System.gc() powinno by usunite z kodu ródowego, czy te powinno zosta wyczone.
Opcje wiersza polece polecane
do monitorowania procesów odzyskiwania pamici
Podstawowy zestaw opcji wiersza polece HotSpot VM sucy do monitorowania procesów odzyskiwania pamici to -XX:+PrintGCDetails wraz z opcj -XX:+PrintGCTimeStamps lub -XX:+Print
´GCDateStamps. Uyteczna moe by te opcja -Xloggc:<nazwa_pliku>, która umoliwia zapisanie
danych do pliku w celu pó
niejszej analizy offline.
Analiza offline danych z procesów odzyskiwania pamici
Celem przeprowadzania analizy offline jest podsumowanie danych dotyczcych odzyskiwania danych oraz szukanie wzorców w ukadach danych. Analiza offline danych z procesów odzyskiwania
pamici moe by przeprowadzana na szereg rónych sposobów, takich jak np. import danych do
arkusza kalkulacyjnego lub skorzystanie z narzdzia do tworzenia wykresów. Jednym z narzdzi
przeznaczonych do przeprowadzania analizy offline jest GCHisto. Jest to bezpatne narzdzie,
które moesz pobra ze strony http://gchisto.dev.java.net. GCHisto odczytuje zapisane w pliku dane
z odzyskiwania pamici i prezentuje je zarówno w formie tabelarycznej, jak i w postaci graficznej.
Na rysunku 4.1 przedstawiono tabelaryczne podsumowanie z zakadki GC Pause Stats (statystyki
przestojów mechanizmów odzyskiwania pamici).
Zakadka GC Pause Stats dostarcza informacji, takich jak liczba, obcienie i czas trwania procesów odzyskiwania pamici. Dodatkowe opcje w tej zakadce su do zawenia obszaru analizy
do jednej z wyej wymienionych kategorii.
Wszystkie procesy odzyskiwania pamici oraz fazy tych procesów, które powoduj przestoje
typu „stop-the-world”, zostay wyszczególnione w osobnym wierszu w tabeli, a w pierwszym wierszu podana zostaa ich warto cakowita. Na rysunku 4.1 przedstawiono dane dla równoczesnego
mechanizmu odzyskiwania pamici. Jak sobie pewnie przypominasz z rozdziau 3., równoczesny
mechanizm odzyskiwania pamici poza mniejszym (modego pokolenia) i wikszym odzyskiwaniem
pamici generuje równie dwa przestoje typu „stop-the-world”. S to znak inicjujcy CMS oraz
ponowne zaznaczanie CMS. Jeli zaobserwujesz, e przestoje dla fazy znaku inicjujcego oraz
fazy ponownego zaznaczania s dusze ni przestoje dla procesu mniejszego odzyskiwania pamici, jest to sugestia, e naley wykona regulacj JVM. Przestój wywoany przez kad z tych
dwóch faz powinien trwa krócej ni mniejsze odzyskiwanie pamici.
Kup książkę
Poleć książkę
130
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Rysunek 4.1. Statystyki przestojów mechanizmów odzyskiwania pamici w GCHisto
Poniewa przepustowociowy mechanizm pamici generuje przestoje „stop-the-world” tylko
dla procesów odzyskiwania pamici, w zakadce GC Pause Stats narzdzia GCHisto dla tego
mechanizmu znajdziesz tylko dane dotyczce mniejszego i penego odzyskiwania pamici.
Liczba procesów mniejszego odzyskiwania pamici w porównaniu z liczb procesów penego
odzyskiwania pamici daje wyobraenie o czstotliwoci uruchamiania procesów penego odzyskiwania pamici. Ta informacja wraz z danymi na temat dugoci przestojów na pene odzyskiwanie pamici moe by oceniana pod wzgldem wymaga aplikacji dotyczcych czasu trwania
procesów penego odzyskiwania pamici.
Obcienie, jakie powoduje dziaanie mechanizmu odzyskiwania pamici (kolumna Overhead
(%)), jest wska
nikiem tego, jak dobrze mechanizm zosta wyregulowany. Zasadniczo obcienie
dla równoczesnego mechanizmu odzyskiwania pamici powinno wynosi mniej ni 10%. Teoretycznie moliwe jest osignicie wartoci z przedziau 1 – 3%. Z kolei dla przepustowociowego
mechanizmu odzyskiwania pamici obcienie w okolicach 1% wskazuje na dobrze wyregulowany mechanizm. Warto obcienia 3% i wicej dla tego mechanizmu jest wskazaniem, e
regulacja mechanizmu odzyskiwania pamici moe poprawi wydajno aplikacji. Wane jest,
aby zdawa sobie spraw, e istnieje zaleno pomidzy obcieniem mechanizmu odzyskiwania
pamici a rozmiarem sterty Java. Im wiksza sterta Java, tym wiksze moliwoci do zmniejszenia
obcienia generowanego przez mechanizm odzyskiwania pamici. Uzyskanie najmniejszego moliwego obcienia dla okrelonego rozmiaru sterty Java wymaga regulacji JVM.
Na rysunku 4.1 obcienie dla mechanizmu odzyskiwania pamici wynosi nieco ponad 14%.
Stosujc si do ogólnych wskazówek opisanych wyej, moemy przyj, e regulacja JVM prawdopodobnie zredukuje to obcienie.
Maksymalne czasy przestojów umieszczone w ostatniej kolumnie po prawej stronie mog
by analizowane pod wzgldem wymaga aplikacji dotyczcych najgorszych zakadanych opó
nie
wywoywanych przez procesy odzyskiwania pamici. Jeli którykolwiek z maksymalnych czasów
przestojów przekracza wymagania aplikacji, naley rozway regulacj JVM. To, w jak duym
stopniu wymagania aplikacji zostay przekroczone oraz ile z przedstawionych wartoci przekracza
te wymagania, determinuje, czy regulacja JVM jest koniecznoci.
Wartoci minimalne (kolumna Min(ms)), maksymalne (kolumna Max(ms)), rednie (kolumna
Avg(ms)) oraz odchylenie standardowe (kolumna Sigma(ms)) dostarczaj informacji na temat dystrybucji czasu przestojów. Dystrybucja czasu przestojów przedstawiona zostaa w zakadce GC Pause
Distribution, co pokazano na rysunku 4.2.
Kup książkę
Poleć książkę
Odzyskiwanie pamici
131
Rysunek 4.2. Dystrybucja przestojów dla mechanizmów odzyskiwania pamici
Domylny ukad wykresu w zakadce GC Pause Distribution przedstawia rozkad przestojów
dla wszystkich rodzajów procesów odzyskiwania pamici. W oknie znajdujcym si po lewej
stronie wykresu moesz dodawa lub odejmowa rodzaje procesów odzyskiwania pamici, które
maj by uwzgldnione na wykresie. O y na wykresie reprezentuje liczb przestojów, a o x to
czas trwania przestoju dla danego zdarzenia. Zasadniczo najwygodniej przeglda osobno dane
dotyczce procesów penego odzyskiwania pamici, poniewa s to zazwyczaj najdusze przestoje. Z kolei osobna analiza danych dla procesów mniejszego odzyskiwania pamici daje moliwo
zaobserwowania szerokiej rónorodnoci czasu przestojów. Szeroka dystrybucja czasu przestojów moe wskazywa na due wahania wspóczynnika alokacji oraz promocji obiektów. Jeli zaobserwujesz szerok dystrybucj czasu przestojów, powiniene przej do zakadki GC Timeline
i odnale
najwysze wartoci dla aktywnoci procesów odzyskiwania pamici. Przykad zamieszczono na rysunku 4.3.
Rysunek 4.3. Linia czasu w zakadce GC Timeline
Domylny widok zakadki GC Timeline przedstawia przestoje dla wszystkich procesów odzyskiwania pamici w funkcji czasu dla caego badanego okresu. Aby na dole wykresu na osi x widoczna
bya podziaka czasowa, musisz korzysta ze statystyk zawierajcych opcje -XX:+PrintGCTimeStamps
i -XX:+PrintGCDateStamps lub skorzysta z opcji -Xloggc. Kady z przestojów odzyskiwania pamici
zosta na wykresie zaznaczony „tickiem”, aby zilustrowa czas trwania przestoju (na osi y) oraz
sytuacj, kiedy przestój jest spowodowany uruchomieniem JVM (na osi x).
Istnieje kilka wzorców, których naley poszukiwa na wykresie z zakadki GC Timeline. Powiniene np. zwróci uwag, kiedy maj miejsce procesy penego odzyskiwania pamici i z jak
czstotliwoci s przeprowadzane. Dla tej analizy warto ustawi jako rodzaj przestoju jedynie
Kup książkę
Poleć książkę
132
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
pene odzyskiwanie pamici. Na wykresie czasu moesz zaobserwowa, kiedy uruchamianie penego odzyskiwania pamici jest zwizane z uruchamianiem JVM, co daje pogld na to, w jakich
momentach jest uruchamiane pene odzyskiwane.
Ustawienie na wykresie jedynie przestojów dla procesów mniejszego odzyskiwania pamici
pozwala obserwowa najwysze i by moe powtarzajce si wartoci dla czasu trwania odzyskiwania pamici w danym przedziale czasu. Kade zaobserwowane szczyty wartoci lub powtarzajce si wzorce mog zosta odwzorowane z powrotem w dzienniku zdarze aplikacji, aby zorientowa si, co dzieje si w systemie w momencie, kiedy te zdarzenia maj miejsce. Przypadki
uycia mechanizmu odzyskiwania pamici w tych przedziaach czasu mog stanowi sygna do
gbszego przyjrzenia si moliwociom redukcji alokacji oraz przechowywania obiektów. Zmniejszenie poziomu alokacji obiektów oraz iloci przechowywanych obiektów dla okresów najwikszej
aktywnoci mechanizmu odzyskiwania pamici redukuje czstotliwo mniejszego odzyskiwania
pamici i potencjalnie moe równie zredukowa czstotliwo penego odzyskiwania pamici.
Interesujcy Ci obszar wykresu dla linii czasu moe zosta powikszony poprzez zaznaczenie
za pomoc myszy wybranego fragmentu, co pokazano na rysunku 4.4.
Rysunek 4.4. Powikszanie obszaru wykresu w zakadce GC Timeline
Powikszenie umoliwia zawenie obserwacji do obszaru okrelonego przedziau czasu, dziki
czemu moesz odczyta z wykresu czas kadego przestoju dla odzyskiwania pamici. Aby przywróci normalne proporcje wykresu, naley klikn prawym przyciskiem dowolne miejsce na obszarze
wykresu i z menu kontekstowego wybra opcj Auto Range/Both Axes.
Narzdzie GCHisto pozwala równie na jednoczesne zaimportowanie kilku plików dziennika
zdarze dla odzyskiwania pamici. Suy do tego zakadka Trace Management. Przy zaadowaniu
wielu plików dziennika dla kadego pliku tworzona jest indywidualna zakadka, która umoliwia
proste przeczanie pomidzy danymi zawartymi w tych plikach. Jest to uyteczne, kiedy chcesz porówna dzienniki odzyskiwania zdarze dla rónych konfiguracji sterty Java lub dla rónych poziomów obcienia aplikacji.
Narzdzia graficzne
Odzyskiwanie pamici moe by równie monitorowane za pomoc narzdzi graficznych, które
w porównaniu z analiz danych tekstowych mog nieco uatwi identyfikacj trendów lub wzorców.
Do monitorowania HotSpot VM mona zastosowa nastpujce narzdzia graficzne: JConsole,
VisualGC oraz VisualVM. Narzdzie JConsole jest dystrybuowane z pakietem JDK dla Javy w wersji 5. oraz wersji kolejnych.
Kup książkę
Poleć książkę
Odzyskiwanie pamici
133
Narzdzie VisualGC zostao pierwotnie zaprojektowane i byo dostarczane cznie z jvmstat.
Moesz je pobra bezpatnie ze strony http://java.sun.com/performance/jvmstat.
VisualVM jest projektem typu open source, który czy w pojedynczym narzdziu kilka istniejcych ju wczeniej prostych funkcji sucych do monitorowania i profilowania aplikacji Java.
VisualVM jest dostpny w JDK dla Java 6 Update 6 i wersji pó
niejszych. Moesz go równie pobra bezpatnie ze strony http://visualvm.dev.java.net.
JConsole
JConsole jest zgodnym z technologi JMX (ang. Java Management Extensions) narzdziem GUI,
które podcza si do dziaajcej maszyny wirtualnej Javy dla wersji 5. Javy i nowszych. Aplikacje Java
uruchomione na JVM dla Javy w wersji 5. musz posiada waciwo -Dcom.sun.management.
´jmxremote, aby umoliwi podczenie JConsole. Tej waciwoci nie wymagaj aplikacje uruchomione na JVM dla Javy w wersji 6. i wersjach pó
niejszych. Poniszy przykad jest ilustracj,
jak podczy JConsole do aplikacji demo o nazwie Java2Demo, która jest dostarczana z pakietem
JDK. W przypadku Java 5 JDK aplikacja Java2Demo moe by uruchomiona za pomoc nastpujcej komendy wiersza polece.
W systemach Solaris i Linux:
$ <JDK_katalog_instalacji>/bin/java -Dcom.sun.management.jmxremote -jar <JDK_
katalog_instalacji>/demo/jfc/Java2D/Java2Demo.jar
<JDK_katalog_instalacji> to cieka do katalogu, w którym zainstalowany zosta pakiet Java
5 JDK.
W systemach Windows:
<JDK_katalog_instalacji>\bin\java -Dcom.sun.management.jmxremote -jar <JDK_
katalog_instalacji>\demo\jfc\Java2D\Java2Demo.jar
Do uruchomienia JConsole z JVM dla Javy w wersji 6. lub wersji pó
niejszych waciwo -Dcom.
´sun.management.jmxremote nie jest wymagana jako argument.
W systemach Solaris i Linux:
$ <JDK_katalog_instalacji>/bin/jconsole
W systemach Windows:
<JDK_katalog_instalacji>\bin\jconsole
Kiedy narzdzie JConsole zostanie uruchomione, automatycznie wykrywa i oferuje moliwoci podczenia do aplikacji Java dziaajcej lokalnie lub zdalnie. Okno dialogowe poczenia
róni si nieco w wersjach JConsole dostarczanych z Jav w wersji 5. i 6., co pokazano odpowiednio na rysunkach 4.5 i 4.6.
Rysunek 4.5. Okno dialogowe poczenia JConsole dla 5. wersji Javy
Kup książkę
Poleć książkę
134
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
W JConsole dla Javy w wersji 5. monitorowa mona aplikacje znajdujce si na licie okna dialogowego poczenia, które zostay uruchomione za pomoc waciwoci -Dcom.sun.management.
´jmxremote. Drug kategori aplikacji nalecych do tej grupy s aplikacje posiadajce takie dane
logowania uytkownika, co uytkownik, który uruchomi narzdzie JConsole.
Rysunek 4.6. Okno dialogowe poczenia JConsole dla 6. wersji Javy
Przy uyciu JConsole dla Javy w wersji 6. monitorowa mona aplikacje znajdujce si na licie okna dialogowego poczenia, które s aplikacjami Javy w wersji 6. oraz wersji 5. uruchomionymi za pomoc waciwoci -Dcom.sun.management.jmxremote. Obie te grupy aplikacji musz posiada te same dane logowania uytkownika, co uytkownik, który uruchomi JConsole. Aplikacje
Javy w wersji 5., które posiadaj te same dane logowania uytkownika, a nie zostay uruchomione za
pomoc waciwoci -Dcom.sun.management.jmxremote, znajduj si na licie, ale s zaznaczone szar czcionk i niedostpne.
Aby rozpocz monitorowanie aplikacji w systemie lokalnym, naley wybra parametry Name
(nazwa aplikacji) oraz PID (identyfikator procesu aplikacji), a nastpnie klikn przycisk Connect
(pocz). Monitoring zdalny (ang. remote monitoring) moe by uyteczny, kiedy chcesz wyizolowa z monitorowanego systemu wykorzystanie zasobów systemowych przez aplikacj JConsole.
Aplikacja monitorowana w zdalnym systemie musi zosta uruchomiona z wczon funkcj zarzdzania zdalnego (ang. remote management). Wczenie funkcji zarzdzania zdalnego wie si
z okreleniem numeru portu sucego do komunikacji z monitorowan aplikacj. Opcjonalnie
mona te ze wzgldów bezpieczestwa uruchomi protokó szyfrowania SSL. Informacje na temat sposobu uruchamiania funkcji zarzdzania zdalnego znajdziesz w przewodnikach dotyczcych
zarzdzania i monitorowania dla platform Java 5 SE i Java 6 SE:
„ Java SE 5 — http://java.sun.com/j2se/1.5.0/docs/guide/management/index.html;
„ Java SE 6 — http://java.sun.com/javase/6/docs/technotes/guides/management/toc.html.
Wskazówka
Za pomoc narzdzia JConsole mona równoczenie monitorowa wicej ni jedn aplikacj
Java. W celu nawizania poczenia z kolejn aplikacj wybierz menu Connection/New Connection,
a nastpnie okrel par parametrów Name i PID dla tej aplikacji.
Kup książkę
Poleć książkę
Odzyskiwanie pamici
135
Po nawizaniu przez narzdzie JConsole poczenia z aplikacj uzyskasz dostp do szeciu zakadek przedstawiajcych róne statystyki. Domylny widok okna JConsole róni si w wersjach dla
Javy 5. i 6. W przypadku Javy w wersji 6. JConsole wywietla graficzn reprezentacj dla pamici
sterty, wtków, klas oraz wykorzystania procesora. Z kolei JConsole dla 5. wersji Javy podaje te
same informacje, ale w formie tekstowej. Dla celów monitorowania procesów odzyskiwania pamici
w JVM najbardziej uyteczna jest zakadka Memory (pami). Zakadka ta wyglda tak samo zarówno w przypadku Javy w wersji 5., jak i 6. Na rysunku 4.7 przedstawiono zakadk Memory
narzdzia JConsole.
Rysunek 4.7. Zakadka Memory w JConsole
Zakadka Memory wykorzystuje wykresy w celu graficznego przedstawienia wykorzystania
pamici JVM w okrelonym przedziale czasu. Stosowane w JConsole nazwy przestrzeni, które
skadaj si na stert Java oraz nazwy pul pamici, mog róni si w zalenoci od wersji JVM
oraz stosowanego mechanizmu odzyskiwania pamici. Nazwy te mona jednak atwo przyporzdkowa do nastpujcych nazw przestrzeni HotSpot VM.
„
Eden (ang. eden space). Pula pamici, w której alokowane s prawie wszystkie obiekty Javy.
„
Przestrze ocalaych (ang. survivor space). Pula pamici zawierajca obiekty, które przetrway
przynajmniej jedno odzyskiwanie pamici dla edenu.
„
Przestrze starego pokolenia lub przestrze zatrudnionych obiektów (ang. old space,
tenured space). Pula pamici zawierajca obiekty, które przetrway pewien próg wieku
dla procesów odzyskiwania pamici.
„
Przestrze staego pokolenia (ang. permanent generation space). Pula pamici zawierajca
wszystkie dane refleksyjne JVM, takie jak obiekty klas i metod. Jeli monitorowana maszyna
wirtualna Javy obsuguje udostpnianie danych klas, ta przestrze bdzie podzielona na
obszar tylko do odczytu oraz obszar z moliwoci zapisu.
Kup książkę
Poleć książkę
136
„
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Pami podrczna kodu (ang. code cache). Dotyczy HotSpot VM i zawiera pul pamici,
która jest wykorzystywana przez kompilator JIT oraz suy do przechowywania
skompilowanego kodu.
JConsole definiuje pami sterty jako kombinacje edenu, przestrzeni ocalaych oraz przestrzeni starego pokolenia. Pami nienaleca do sterty jest zdefiniowana jako kombinacja przestrzeni staego pokolenia oraz pamici podrcznej kodu. Moesz wywietla wykresy wykorzystania
pamici sterty (ang. heap memory usage) lub wykorzystania pamici nienalecej do sterty (ang.
non-heap memory usage), wybierajc jedn z opcji rozwijanego menu Chart (wykres). Moesz równie
przeglda wykresy dla wybranych przestrzeni. Ponadto klikajc supki opisane Heap (sterta)
oraz Non-Heap (przestrze nienaleca do sterty), które znajduj si w prawym dolnym rogu,
moesz przecza si pomidzy wykresami okrelonych przestrzeni Heap i Non-Heap. Nazwa
przestrzeni lub puli pamici, któr reprezentuje dany supek, wywietli si po najechaniu na supek
kursorem myszy.
Wzorzec, na który powiniene zwróci uwag, to ten wzorzec, kiedy przestrze ocalaych pozostaje zapeniona przez duszy czas. Wskazuje on sytuacj, w której przestrzenie ocalaych s
przepenione, a obiekty promowane do starego pokolenia, zanim bd miay moliwo osignicia
odpowiedniego wieku. Wyregulowanie rozmiaru przestrzeni modego pokolenia moe rozwiza
problemy z przepenianiem si przestrzeni ocalaych.
Zakres czasowy wykresu wykorzystania pamici mona zmienia, wybierajc jedn z dostpnych
opcji w rozwijanym menu Time Range (zakres czasowy).
W lewym dolnym rogu okna zakadki Memory wywietlane s nastpujce biece metryki
pamici dla maszyny wirtualnej Javy.
„ Used (pami wykorzystana). Ilo pamici wykorzystywanej w danym momencie, wcznie
z pamici zajt przez obiekty Javy zarówno te osigalne, jak i nieosigalne.
„ Committed (pami przydzielona). Gwarantowana ilo pamici dostpnej dla JVM.
Warto ta moe si zmienia wraz z upywem czasu. Maszyna wirtualna Javy moe
uwalnia do systemu cz przydzielonych zasobów pamici, wic jej ilo moe si
zmniejsza w stosunku do wartoci pocztkowej. Ilo pamici przydzielonej jest zawsze
wiksza lub równa iloci pamici wykorzystanej.
„ Max (pami maksymalna). Maksymalna ilo pamici, która moe by wykorzystana
dla mechanizmu zarzdzania pamici. Ilo tej pamici moe si zmienia lub by
niezdefiniowana. Alokacja pamici moe si nie powie, jeli JVM spróbuje wykorzysta
wicej pamici, ni okrela to ilo pamici przydzielonej, nawet jeli ilo pamici
wykorzystanej jest mniejsza lub równa pamici maksymalnej (np. kiedy w systemie zaczyna
brakowa pamici wirtualnej).
„ GC time (czas odzyskiwania pamici). czny czas, który zosta przeznaczony na procesy
odzyskiwania pamici typu „stop-the-world”, oraz cakowita liczba wywoa procesów
odzyskiwania pamici cznie z biecym cyklami odzyskiwania pamici. Kady wiersz
informacji w tym polu dotyczy osobnego mechanizmu odzyskiwania pamici w JVM.
Narzdzie JConsole wyposaone zostao w jeszcze inne funkcje dotyczce monitorowania procesów odzyskiwania pamici. Wiele z nich zostao opisanych w dokumentacji JConcole, któr moesz znale
na stronach:
„
Java SE 5 — http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html;
„
Java SE 6 — http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html.
Kup książkę
Poleć książkę
Odzyskiwanie pamici
137
VisualVM
VisualVM jest graficznym narzdziem typu open source, które zostao opracowane w 2007 roku,
wprowadzone w JDK dla Java 6 Update 7 i jest traktowane jako druga generacja narzdzia
JConsole. VisualVM czy kilka istniejcych narzdzi programowych JDK oraz proste narzdzia
monitorowania pamici, takie jak JConsole. Ponadto w VisualVM znajdziesz funkcje profilowania
znane z popularnego NetBeans Profiler. VisualVM zostao zaprojektowane do stosowania zarówno
w rodowiskach programistycznych, jak i rodowiskach produkcyjnych. Poszerza ono zakres moliwoci monitorowania oraz analizy wydajnoci dla platformy Java SE. VisualVM wykorzystuje
równie architektur pluginów (wtyczek) NetBeans, co pozwala na proste dodawanie komponentów i wtyczek oraz daje moliwo zastosowania istniejcych komponentów i wtyczek tego narzdzia do monitorowania i profilowania dowolnej aplikacji.
Do uruchomienia VisualVM wymagana jest platforma Java 6, ale samo narzdzie moe by
wykorzystane do monitorowania zdalnego lub lokalnego aplikacji Java 1.4.2, Java 5 lub Java 6.
Istniej jednak pewne ograniczenia dotyczce moliwoci VisualVM w zalenoci od wersji Javy
wykorzystywanej przez monitorowan aplikacj oraz tego, czy aplikacja dziaa lokalnie, czy zdalnie
w stosunku do VisualVM. W tabeli 4.1 przedstawiono funkcje VisualVM dostpne dla okrelonej
aplikacji Java dziaajcej z konkretn wersj pakietu JDK.
Tabela 4.1. Zestawienie funkcji VisualVM
Funkcja
JDK 1.4.2 lokalnie
i zdalnie
JDK 5.0 lokalnie JDK 6.0
i zdalnie
(zdalnie)
JDK 6.0
(lokalnie)
Przegld
•
•
•
•
•
Waciwoci systemu (przegld)
Monitor
•
Wtki
•
•
•
•
•
•
Profilowanie
•
Zrzut wtku
•
Zrzut sterty
•
Wczenie zrzutu sterty na OOME
•
Przegldarka MBean
•
Wrapper dla wtyczek JConsole
(plugin)
VisualGC (plugin)
•
•
•
•
•
•
•
Jak ju wspominalimy, VisualVM posiada równie funkcje umoliwiajce profilowanie.
Chocia profilowanie zostao opisane w rozdziale 5., funkcje zdalnego profilowania VisualVM zostay zawarte w tym rozdziale, poniewa nie s skomplikowane i doskonale cz si z czynnociami monitorowania.
Narzdzie VisualVM moe by uruchomione w systemach operacyjnych Windows, Linux
oraz Solaris za pomoc nastpujcej komendy wiersza polece (zwró uwag, e nazwa polecenia
to jvisualvm, a nie visualvm).
<JDK_katalog_instalacji>\bin\jvisualvm
(<JDK_katalog_instalacji> to cieka do katalogu, w którym zainstalowany zosta pakiet JDK
6 Update 6 lub nowszy).
Kup książkę
Poleć książkę
138
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Jeli posiadasz samodzieln wersj VisualVM pobran ze strony java.net, jej uruchomienie
w systemach Windows, Linux oraz Solaris odbywa si za pomoc nastpujcej komendy wiersza
polece (zwró uwag, e uruchomienie wersji samodzielnej VisualVM wymaga zastosowania polecenia visualvm, a nie jvisualvm, jak to ma miejsce dla VisualVM dostarczanego z pakietem JDK).
<VisualVM_katalog_instalacji>\bin\visualvm
(<VisualVM_katalog_instalacji> to cieka do katalogu, w którym zainstalowana zostaa aplikacja
VisualVM).
Alternatywnie moesz uruchomi VisualVM, korzystajc z przegldarki rodowiska graficznego
(np. Windows Explorer) poprzez dwukrotne kliknicie pliku wykonywalnego aplikacji (exe), znajdujcego si w katalogu instalacyjnym.
Pocztkowy widok okna VisualVM przedstawiono na rysunku 4.8. Okno to zostao podzielone
na dwa obszary: Applications (aplikacje) oraz obszar wywietlania monitorowanych statystyk.
Rysunek 4.8. VisualVM
Panel Applications ma posta drzewa, które posiada trzy podstawowe gazie. Ga
Local
zawiera list lokalnych aplikacji Java, które mog by monitorowane za pomoc VisualVM. Druga
ga
nazwana Remote przedstawia list hostów zdalnych. Dla kadego zdalnego hosta wywietlana
jest lista aplikacji, które mog by monitorowane za pomoc VisualVM. Ga
Snapshot zawiera
list dostpnych plików zrzutów ekranu. VisualVM umoliwia robienie zrzutów ekranu dla okrelonego stanu aplikacji Java. S one pó
niej zapisywane do plików i umieszczane na tej licie. Zrzuty
ekranu mog by uyteczne, kiedy chcesz zapisa wane informacje dotyczce stanu aplikacji lub
porówna ze sob kilka zaobserwowanych sytuacji.
Lokalne aplikacje Java s automatycznie identyfikowane przez VisualVM w momencie ich
uruchomienia lub w momencie uruchomienia VisualVM. Jak pokazano przykadowo na rysunku 4.8,
VisualVM wykry automatycznie aplikacje Java, które zostay pokazane w gazi Local. Kiedy uruchamiane s kolejne aplikacje Java, VisualVM równie wykrywa je automatycznie i dodaje do listy
w tej gazi. Gdy aplikacje s zamykane, zostaj usunite z listy.
Do monitorowania zdalnych aplikacji wymagana jest odpowiednia konfiguracja systemu, w którym te aplikacje dziaaj. W zdalnym systemie musi by uruchomiona aplikacja jstatd daemon.
Jest ona dystrybuowana w pakietach JDK Java 5 i Java 6, ale nie jest czci pakietu JRE Java 5 czy
Kup książkę
Poleć książkę
Odzyskiwanie pamici
139
Java 6. Aplikacj jstatd daemon znajdziesz w tym samym katalogu, w którym znajduj si jvisualvm
oraz java launcher.
Jstatd daemon uruchamia aplikacj Java RMI server, która monitoruje uruchamianie i zamykanie HotSpot VM oraz oferuje interfejs umoliwiajcy podczenie i zdalne monitorowanie
aplikacji Java takim narzdziom jak VisualVM. Jstatd daemon musi zosta uruchomiona z takimi
samymi parametrami logowania uytkownika, co aplikacja Java, która ma by monitorowana.
Poniewa jstatd moe ujawni instrumentalizacj JVM, musi posiada menedera zabezpiecze
i wymaga przy tym pliku polityki bezpieczestwa. Powiniene wic mie na uwadze poziom dostpu
zapewniany uytkownikom, aby nie naraa bezpieczestwa monitorowanej maszyny wirtualnej
Javy. Plik polityki bezpieczestwa wykorzystywany przez jstatd musi by zgodny ze specyfikacj
polityki bezpieczestwa Javy. Poniej podany zosta przykad pliku polityki bezpieczestwa,
który moe by zastosowany z jstatd:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
Wskazówka
Zwró uwag, e powyszy przykad pliku polityki bezpieczestwa dopuszcza uruchamianie jstatd
bez adnych wyjtków bezpieczestwa. Ta polityka jest mniej liberalna ni przyznanie wszelkich
uprawnie kadej bazie kodów, ale jest bardziej liberalna ni polityka przyznajca minimalne
uprawnienia do uruchomienia serwera jstatd. W celu dalszego ograniczenia dostpu mona zdefiniowa bardziej restrykcyjn polityk ni pokazano w tym przykadzie. Jeli jednak nie ma moliwoci spenienia zaoe bezpieczestwa w pliku polityki bezpieczestwa, najlepszym wyjciem
jest stosowanie narzdzi monitorujcych lokalnie zamiast monitorowania zdalnego i uruchamiania jstatd.
Zakadajc, e polityka bezpieczestwa jest zapisana w pliku jstatd.policy, moesz wykorzysta
powyszy przykad polityki i uruchomi jstatd daemon za pomoc nastpujcej komendy wiersza
polece:
jstatd -J-Djava.security.policy=<cieka_do_pliku_polityki_bezpieczestwa>/jstatd.policy
Wskazówka
Wicej szczegóów dotyczcych konfiguracji jstatd znajdziesz na stronie http://java.sun.com/
javase/6/docs/technotes/tools/share/jstatd.html.
Kiedy ju jstatd daemon zostanie uruchomiony, na zdalnym systemie moesz zweryfikowa, czy
system lokalny moe podczy si do jstatd daemon, stosujc komend jps z okreleniem nazwy
hosta zdalnego systemu. Komenda jps standardowo powoduje wywietlenie aplikacji Java, które
mog by monitorowane. Uycie tej komendy z podaniem nazwy hosta powoduje prób poczenia z jstatd daemon systemu zdalnego i wykrycie aplikacji Java, które mog by monitorowane
zdalnie. Jeli nie podasz nazwy hosta dla komendy jps, otrzymasz list aplikacji Java, które mog
by monitorowane lokalnie.
Zaómy, e skonfigurowany przez Ciebie system zdalny, na którym uruchomiony zosta jstatd
daemon, nazywa si „halas”. Aby zweryfikowa w systemie lokalnym poczenie z systemem zdalnym, powiniene wykona komend jps w nastpujcy sposób:
Kup książkę
Poleć książkę
140
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
$ jps halas
2622 Jstatd
Jeli komenda jps zwraca warto Jstatd, oznacza to, e jstatd daemon dla systemu zdalnego zosta skonfigurowany prawidowo. Liczba znajdujca si przed wartoci Jstatd w listingu okrela
id procesu dla jstatd daemon. Id procesu nie jest istotne dla weryfikacji zdalnego poczenia.
Aby monitorowa zdaln aplikacj za pomoc VisualVM, musisz skonfigurowa dla tego narzdzia nazw zdalnego hosta lub adres IP. W tym celu naley klikn prawym przyciskiem myszy
ga
Remote w panelu Applications i wpisa informacje dotyczce zdalnego hosta. Jeli chcesz monitorowa aplikacje Java na kilku hostach zdalnych, musisz dla kadego hosta skonfigurowa jstatd
daemon wedug procedury opisanej wczeniej. Nastpnie naley doda w VisualVM informacje na
temat kadego zdalnego hosta, który zosta skonfigurowany. VisualVM automatycznie wykrywa
aplikacje Java, które mog by monitorowane, i umieszcza je na licie. Pamitaj, e kada zdalna
aplikacja musi posiada dane logowania uytkownika, takie same jak dane uytkownika, który uruchomi VisualVM oraz jstatd. Musi take posiada uprawnienia okrelone w pliku polityki bezpieczestwa jstatd. Na rysunku 4.9 przedstawiono VisualVM ze skonfigurowanym systemem zdalnym i list aplikacji, które mog by monitorowane.
Rysunek 4.9. VisualVM skonfigurowany do monitorowania zdalnych aplikacji
Aby rozpocz monitorowanie wybranej aplikacji, naley dwukrotnie klikn lewym przyciskiem myszy nazw aplikacji lub reprezentujc j ikon w gaziach Local lub Remote. Moesz
równie w tym samym miejscu klikn prawym przyciskiem myszy i wybra z menu kontekstowego
polecenie Open (otwórz). Kada z tych czynnoci spowoduje otwarcie w prawym panelu VisualVM
okna zakadki dla wybranej aplikacji. W przypadku aplikacji lokalnych uruchomionych na platformie Java 6 (lub nowszej) widoczne bd równie dodatkowe podzakadki.
Liczba okien podzakadek wywietlanych w prawym panelu VisualVM zaley od wersji platformy Java aplikacji, od tego, czy jest to aplikacja zdalna, czy lokalna, oraz od tego, czy w VisualVM
zainstalowane zostay jakiekolwiek dodatkowe wtyczki. W najgorszym razie dostpne s tylko dwie
podzakadki: Overview (przegld) oraz Monitor (monitor). Okno Overview zawiera wysokiego po-
Kup książkę
Poleć książkę
Odzyskiwanie pamici
141
ziomu przegld monitorowanych aplikacji. Podawane s takie informacje jak: identyfikator procesu (ang. process id), nazwa hosta (ang. host name), na którym uruchomiona jest aplikacja, nazwa
gównej klasy Java, argumenty przekazane do aplikacji, nazwa JVM, cieka do JVM, zastosowane
flagi JVM, informacje, czy wczony jest zrzut sterty dla bdu out of memory, liczba wykonanych
zrzutów wtku lub zrzutów sterty oraz waciwoci systemu monitorowanej aplikacji, jeli takie s
dostpne. Okno Monitor wywietla wykorzystanie sterty, wykorzystanie przestrzeni staego pokolenia, informacje o zaadowanych klasach oraz liczb wtków. Przykad okna Monitor przedstawiajcego monitorowan aplikacj dziaajc zdalnie na platformie Java 6 zosta pokazany na rysunku 4.10.
Rysunek 4.10. Okno Monitor w VisualVM
Jeli dla zdalnej aplikacji zostao skonfigurowane poczenie JMX, moesz z poziomu okna
Monitor uruchomi proces odzyskiwania pamici lub wykona zrzut sterty. Aby skonfigurowa
JMX dla zdalnej aplikacji, musi ona zosta uruchomiona co najmniej z poniszymi waciwociami
systemu:
„ com.sun.management.jmxremote.port=<numer_portu>;
„ com.sun.management.jmxremote.ssl=<true | false>;
„
com.sun.management.jmxremote.authenticate=<true | false>.
eby skonfigurowa VisualVM tak, by czy si ze zdaln aplikacj poprzez JMX, wybierz
z menu File opcj Add JMX Connection (dodaj poczenie JMX). W oknie konfiguracji poczenia
JMX trzeba w okrelonych polach wpisa ponisze informacje.
Kup książkę
Poleć książkę
142
„
„
„
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
W polu Connection naley wpisa nazwa_hosta:<numer_portu>. Jeli np. zdalna aplikacja
zostaa uruchomiona na hocie halas i skonfigurowae waciwo com.sun.management.
´jmxremote.port=4433, to w polu Connection powiniene wpisa halas:4433.
Opcjonalnie moesz poda nazw (ang. display name), która ma by wywietlana w VisualVM
w celu identyfikacji zdalnej aplikacji przez poczenie JMX. Domylnie VisualVM uywa
jako nazwy wywietlanej wartoci z pola Connection.
Jeli wczye uwierzytelnianie, konfigurujc waciwo com.sun.management.
´jmxremote.authenticate=true, musisz w polach Username i Password poda
odpowiednio nazw uytkownika oraz haso wymagane do poczenia zdalnego.
Wicej szczegóów na temat konfiguracji JMX dla zdalnego monitorowania aplikacji za pomoc
VisualVM znajdziesz w dokumentacji VisualVM JMX na stronie http://download.oracle.com/javase/6/
docs/technotes/guides/visualvm/jmx_connections.html.
Po skonfigurowaniu poczenia JMX dodatkowa ikona informujca o skonfigurowaniu zdalnego poczenia JMX do zdalnej aplikacji zostanie wywietlona w panelu Applications narzdzia
VisualVM. Skonfigurowanie poczenia JMX dla zdalnych aplikacji zwiksza moliwoci monitorowania dla VisualVM. Przykadowo okno Monitor wywietla dodatkowo wykorzystanie CPU przez
aplikacj oraz umoliwia inicjowanie procesu penego odzyskiwania pamici i wykonywanie zrzutu
sterty. Zostao to pokazane na rysunku 4.11.
Rysunek 4.11. Zdalny monitoring poprzez JMX
Poza zwikszeniem moliwoci w oknie Monitor dostpna jest równie dodatkowa podzakadka Threads (wtki). W oknie Threads pokazane s wtki aplikacji oznaczone rónymi kolorami,
które okrelaj ich status: dziaajcy, upiony, zablokowany, oczekujcy lub rywalizujcy o blokad
monitora. Standardowo okno Threads jest dostpne dla wszystkich aplikacji monitorowanych lokalnie.
Kup książkę
Poleć książkę
Odzyskiwanie pamici
143
Okno Threads oferuje informacje dotyczce najbardziej aktywnych wtków, które s w trakcie pozyskiwania i uwalniania blokad. Okno to moe by uyteczne do obserwacji okrelonych
zachowa wtków w aplikacji, szczególnie w sytuacji, kiedy statystyki z monitorowania systemu
operacyjnego sugeruj, e w aplikacji moe dochodzi do rywalizacji o blokady.
Dodatkow opcj dostpn w oknie Threads jest moliwo wykonywania zrzutu wtku za
pomoc przycisku Thread Dump. Kiedy pojawia si danie zrzutu wtku, VisualVM otwiera
w kolejnej zakadce okno wywietlajce zrzut wtku oraz w panelu Applications dodaje pod wpisem
dotyczcym monitorowanej aplikacji wpis na temat tego zrzutu. Zwró uwag, e jeli zrzuty wtku
nie zostan zapisane, nie bd przechowywane i dostpne po zamkniciu VisualVM. Zrzut wtku
mona zapisa, klikajc prawym przyciskiem myszy ikon lub etykiet zrzutu wtku znajdujc
si pod nazw aplikacji na licie w panelu Applications. Zapisane zrzuty wtku mog by potem
w dowolnym momencie zaadowane do VisualVM poprzez wybranie z menu File opcji Load i wskazanie katalogu, w którym zrzut wtku zosta zapisany.
VisualVM oferuje równie funkcje profilowania zarówno dla aplikacji zdalnych, jak i lokalnych.
Funkcje lokalnego profilowania umoliwiaj profilowanie CPU oraz pamici dla aplikacji Java 6.
Dla celów monitorowania uyteczne mog by funkcje monitorowania wykorzystania CPU oraz wykorzystania pamici w trakcie dziaania aplikacji. Musisz by jednak ostrony, uruchamiajc któr
z tych funkcji w systemie produkcyjnym, gdy mog one znaczco obciy dziaajc aplikacj.
Moliwo monitorowania wykorzystania CPU podczas pracy aplikacji pozwala uzyska informacje na temat tego, które metody s najbardziej wykorzystywane podczas okrelonych zdarze.
Przykadowo aplikacja GUI moe dowiadcza problemów z wydajnoci tylko wtedy, kiedy
otwarte jest okrelone okno tej aplikacji. Dlatego te moliwo monitorowania aplikacji GUI
w momencie, w którym otwarte jest interesujce nas okno aplikacji, moe by pomocna dla wyizolowania przyczyny problemu.
Profilowanie zdalne wymaga skonfigurowania poczenia JMX i jest ograniczone do profilowania CPU. Nie umoliwia ono natomiast profilowania pamici. Moliwe jest za to wykonywanie
zrzutów sterty z poziomu okna Sampler lub okna Threads. Zapisane uprzednio zrzuty sterty mog
zosta zaadowane do VisualVM w celu przeprowadzenia analizy wykorzystania pamici.
Aby rozpocz zdalne profilowanie w VisualVM, wybierz i uruchom w panelu Applications
zdaln aplikacje ze skonfigurowanym poczeniem JMX. Nastpnie przejd
do okna Sampler w prawym panelu i kliknij przycisk CPU w celu rozpoczcia procesu profilowania. Na rysunku 4.12
przedstawiono wygld okna Sampler po naciniciu przycisku CPU. W zestawieniu ilustrujcym
wykorzystanie CPU nazwa metody pochaniajcej najwicej czasu umieszczona jest na szczycie
listy. W drugiej kolumnie — SelfTime % (czas wasny) — przedstawiony jest histogram czasu spdzonego w danej metodzie w stosunku do czasu powiconego na inne metody. Nastpna kolumna
— SelfTime — okrela czas powicony na dan metod wyraony w milisekundach. Ostatnia kolumna — Self Time (CPU) — przedstawia czas CPU wykorzystany przez metod. Kada z kolumn moe by sortowana rosnco lub malejco poprzez kliknicie nagówka kolumny. Przy powtórnym klikniciu nagówka przeczasz si midzy sposobami sortowania (z rosncego na
malejcy i odwrotnie).
Proces profilowania moe by wstrzymany przyciskiem Pause, za pomoc którego równie
wznawia si wstrzymany proces. Do wykonywania zrzutów ekranu suy przycisk Snapshot. Po zrobieniu zrzut ekranu jest automatycznie wywietlany przez VisualVM. Zrzut ekranu moe zosta zapisany na dysk. Aby zapisa zrzut ekranu w celu podzielenia si informacjami z innym programist,
pó
niejszego zaadowania pliku do programu lub porównania go z innymi zrzutami ekranu, naley wykona eksport zrzutu do pliku, co pokazano na rysunku 4.13. Zapisany plik zrzutu ekranu
moe by zaadowany do programów VisualVM lub NetBeans Profiler. W celu zaadowania zrzutu
ekranu do VisualVM naley z menu File wybra opcj Load, a nastpnie uruchomi filtrowanie plików po typie Profiler Snapshots (*.nps), aby odnale
zapisany profil.
Kup książkę
Poleć książkę
144
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Rysunek 4.12. Zdalne profilowanie CPU
W oknie zrzutu ekranu wywietlane jest drzewo wywoa, które przedstawia stosy wywoa
(ang. call stack) dla wszystkich wtków przechwyconych w zrzucie ekranu. Kade drzewo wywoa
mona rozwin, by odczyta dane na temat stosu wywoa i metod, które pochaniaj najwicej
czasu oraz najbardziej wykorzystuj procesor. Na dole okna znajduje si zakadka Hot Spots, która
zawiera list metod. Metoda pochaniajca najwicej czasu Self Time znajduje si na szczycie zestawienia. Moliwy jest równie czny podgld zawartoci zakadek Call Tree i Hot Spots. Jest
on dostpny w zakadce Combined. Jeli w zakadce Combined klikniesz wybrany stos wywoa
w drzewie wywoa, tabela metod Hot Spots jest aktualizowana, tak aby pokazywa tylko metody
dla wybranego stosu wywoa.
Dodatkowe informacje na temat profilowania aplikacji Java znajdziesz w rozdziale 5.
VisualVM umoliwia równie adowanie binarnych plików zrzutów sterty generowanych za
pomoc jmap, JConsole lub w momencie wystpienia bdu OutOfMemoryError, jeli zastosowano opcj wiersza polece HotSpot VM -XX:+HeapDumpOnOutOfMemoryError. Binarny zrzut sterty
to zrzut ekranu wszystkich obiektów w stercie JVM zrobiony w momencie generowania zrzutu sterty. Aby utworzy binarny zrzut sterty za pomoc komendy jmap dla platformy Java 6, naley zastosowa skadni jmap -dump:format=b,file=<nazwa_pliku> <jvm pid>, gdzie <nazwa_pliku> okrela
ciek i nazw pliku dla pliku binarnego zrzutu sterty, a <jvm pid> to identyfikator procesu dla
JVM, na której uruchomiona zostaa aplikacja. W przypadku platformy Java 5 komenda ta wyglda nastpujco: jmap -heap:format=b <jvm pid>, gdzie <jvm pid> to identyfikator procesu dla
aplikacji Java. Komenda jmap dla Javy w wersji 5. zapisuje zrzut sterty do pliku o nazwie heap.bin
w katalogu, w którym komenda jmap zostaa wykonana. Narzdzie JConsole dla Javy w wersji 6.
Kup książkę
Poleć książkę
Odzyskiwanie pamici
145
Rysunek 4.13. Zapisywanie zrzutu ekranu
równie umoliwia generowanie zrzutu stery za pomoc MBeana HotSpotDiagnostics. Utworzony
plik binarny zrzutu sterty moe by zaadowany do VisualVM za pomoc opcji Load z menu File
w celu przeprowadzenia analizy.
VisualGC
VisualGC jest wtyczk do narzdzia VisualVM, która umoliwia monitorowanie aktywnoci procesów odzyskiwania pamici, adowarki klas oraz kompilacji JIT. Pierwotnie VisualGC zosta
zaprojektowany jako samodzielny program GUI. Obecnie moe by stosowany samodzielnie lub
jako wtyczka do VisualVM i pozwala monitorowa maszyny wirtualne Javy dla platform Java 1.4.2,
Java 5 oraz Java 6. Kiedy VisualGC zosta dostosowany jako wtyczka do VisualVM, dodano w nim
kilka ulepsze uatwiajcych wykrywanie i podczanie si do maszyn wirtualnych Javy. Przewag
wtyczki VisualGC nad wersj samodzieln GUI jest funkcja automatycznego wykrywania maszyn
wirtualnych Javy, które mog by monitorowane. Po wykryciu s one wywietlane w VisualVM.
W przypadku samodzielnej wersji GUI musisz okreli identyfikator procesu aplikacji Java, któr
chcesz monitorowa i przekaza t informacj jako argument do launchera programu. Identyfikator
procesu moesz sprawdzi za pomoc komendy jps. Przykad zastosowania komendy jps zosta
opisany wczeniej w tym rozdziale jako element konfiguracji instalacyjnej jstatd daemon.
Wtyczka VisualGC jest dostpna w centrum wtyczek VisualVM, czyli w Plug-in Center. Centrum wtyczek otwiera si opcj Plugins w menu Tools. Wtyczka VisualGC powinna si znajdowa
na licie dostpnych wtyczek w zakadce Available Plug-ins.
Samodzieln wersj VisualGC GUI moesz pobra ze strony http://java.sun.com/performance
/jvmstat/#Download.
Kup książkę
Poleć książkę
146
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Bez wzgldu na to, czy korzystasz z wersji samodzielnej VisualGC, czy z wtyczki, aplikacja monitorowana lokalnie musi posiada te same dane logowania uytkownika, co VisualGC. W przypadku monitorowania aplikacji zdalnej te same dane uytkownika musi posiada zarówno jstatd
daemon, jak i monitorowana aplikacja. Sposób konfiguracji oraz uruchomienia jstatd daemon zostay opisane wczeniej w tym rozdziale.
Stosowanie VisualGC jako wtyczki do programu VisualVM jest opisane w tym podpunkcie, poniewa jest prostsze ni korzystanie z wersji samodzielnej VisualGC. Ponadto VisualVM oferuje równie inne zintegrowane funkcje monitorowania.
Po dodaniu wtyczki VisualGC do aplikacji VisualVM podczas monitorowania wybranej aplikacji z listy w panelu Applications, w prawym panelu dostpne jest dodatkowe okno z etykiet
VisualGC (patrz rysunek 4.14).
Rysunek 4.14. Dodatkowa zakadka z oknem VisualGC
Zakadka VisualGC wywietla dwa lub trzy panele w zalenoci od stosowanego mechanizmu
odzyskiwania pamici. Dla przepustowociowego mechanizmu odzyskiwania pamici wywietlane s dwa panele, Spaces (przestrzenie) oraz Graphs (wykresy). Jeli stosowany jest równoczesny
lub szeregowy mechanizm odzyskiwania pamici pod panelami Spaces i Graphs umieszczony jest
trzeci panel o nazwie Histogram (histogram). Na rysunku 4.15 przedstawiono okno VisualGC zawierajce wszystkie trzy panele.
Rysunek 4.15. VisualGC
Kup książkę
Poleć książkę
Odzyskiwanie pamici
147
Kady z tych trzech paneli moe by dodany lub usunity z okna zakadki VisulaGC poprzez
zaznaczenie lub usunicie zaznaczenia odpowiadajcych im pozycji umieszczonych w prawym
górnym rogu.
Panel Spaces zawiera graficzne przedstawienie przestrzeni odzyskiwania pamici oraz wykorzystania tych przestrzeni. Panel jest podzielony na trzy pionowe sekcje, z których kada symbolizuje jedn z przestrzeni odzyskiwania pamici: Perm (przestrze staego pokolenia), Old lub Tenured
(przestrze starego pokolenia) oraz przestrze modego pokolenia skadajc si z edenu oraz dwóch
przestrzeni ocalaych (S0 i S1). Wielko rozmiarów reprezentujcych wymienione przestrzenie
jest proporcjonalna do maksymalnych pojemnoci tych przestrzeni alokowanych przez maszyn
wirtualn Javy. Biecy poziom wykorzystania edenu w stosunku do maksymalnej pojemnoci symbolizowany jest stopniem wypenienia jego obszaru okrelonym kolorem. Dla kadej przestrzeni
odzyskiwania pamici zastosowano indywidualny kolor wypenienia, który jest wykorzystywany
konsekwentnie równie w panelach Graphs i Histogram.
System zarzdzania pamici w HotSpot VM moe zwikszy lub zmniejszy obszar sterty po
odzyskiwaniu pamici, jeli wartoci ustawione dla -Xmx i -Xms s róne. Osiga si to przez zastrzeenie pamici dla danego maksymalnego rozmiaru sterty Java, ale przy jednoczesnym przydzieleniu pamici rzeczywistej jedynie do wielkoci aktualnie wymaganej. Stosunek pomidzy
pamici przydzielon a pamici zarezerwowan jest reprezentowany przez kolor siatki ta w obszarze kadej przestrzeni. Pami nieprzydzielona oznaczona jest jasnoszarym kolorem siatki ta, natomiast pami przydzielona — kolorem ciemnoszarym. W wielu przypadkach wykorzystanie przestrzeni moe by niemal takie same jak ilo pamici przydzielonej, co utrudnia dokadne okrelenie
na siatce ta miejsca podziau przestrzeni na obszar pamici przydzielonej i nieprzydzielonej.
Stosunek rozmiarów edenu i przestrzeni ocalaych dla obszaru modego pokolenia w panelu
Spaces jest z reguy stay. Obydwie przestrzenie ocalaych maj zazwyczaj ten sam rozmiar, a przestrze ich pamici jest w peni przydzielona. Obszar pamici dla edenu moe by tylko czciowo
przydzielony, szczególnie we wczesnych cyklach ycia aplikacji.
Kiedy uruchomiony za pomoc opcji -XX:+UseParallelGC lub -XX:+UseParallelOldGC przepustowociomy mechanizm odzyskiwania pamici stosowany jest wraz z funkcj adaptacyjnego ustalania rozmiaru (wczon domylnie), wzajemny stosunek rozmiarów przestrzeni modego pokolenia moe zmienia si z upywem czasu. Wczona funkcja adaptacyjnego ustalania rozmiaru
moe doprowadzi do sytuacji, w której rozmiary przestrzeni ocalaych nie bd identyczne, a cakowity rozmiar przeznaczony na przestrze modego pokolenia zostanie dynamicznie rozlokowany
pomidzy jego trzema przestrzeniami skadowymi. W przypadku takiej konfiguracji obszary reprezentujce w panelu Spaces przestrzenie ocalaych oraz wypenienie symbolizujce wykorzystanie
tych obszarów maj rozmiar relatywnie odpowiadajcy biecemu, a nie maksymalnemu rozmiarowi caej przestrzeni. Kiedy maszyna wirtualna Javy adaptacyjnie zmienia rozmiar przestrzeni modego pokolenia, obszar reprezentujcy t przestrze w panelu Spaces jest odpowiednio aktualizowany.
Panel Spaces naley obserwowa pod ktem wystpowania kilku okrelonych sytuacji. Przykadowo powiniene zwraca uwag na prdko zapeniania si przestrzeni edenu. Kade zapenienie tej przestrzeni oraz nastpujcy po nim spadek zapenienia reprezentuj mniejsze odzyskiwanie
pamici. Czstotliwo wystpowania tego zdarzenia jest czstotliwoci uruchamiania procesu mniejszego odzyskiwania pamici. Obserwujc przestrzenie ocalaych, moesz zauway, e przy kadym
mniejszym odzyskiwaniu pamici jedna z przestrzeni ocalaych jest zapeniona, a druga pusta. Ta
obserwacja umoliwia zrozumienie sposobu, w jaki mechanizm odzyskiwania pamici kopiuje ywe
obiekty z jednej przestrzeni ocalaych do drugiej przy kadym procesie mniejszego odzyskiwania
pamici. Waniejsze jednak jest monitorowanie przepeniania si przestrzeni ocalaych. Tak
Kup książkę
Poleć książkę
148
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
sytuacj mona zidentyfikowa, przygldajc si zapenieniu przestrzeni ocalaych podczas mniejszego odzyskiwania pamici. Jeli przestrzenie ocalaych s w peni lub prawie w peni zapenione po kadym mniejszym odzyskiwaniu pamici oraz wzrasta zapenienie przestrzeni starego
pokolenia, przestrzenie ocalaych mog si przepenia. Zasadniczo wskazuje to, e obiekty s promowane z modego do starego pokolenia. Jeli jednak s one promowane zbyt wczenie lub zbyt
szybko, moe to ostatecznie doprowadzi do uruchomienia penego odzyskiwania pamici. Przy
penym odzyskiwaniu pamici moesz zaobserwowa spadek zapenienia przestrzeni starego pokolenia. Czstotliwo wystpowania spadków wykorzystania przestrzeni starego pokolenia okrela
czstotliwo uruchamiania procesów penego odzyskiwania pamici.
Panel Graphs pokazany na rysunku 4.15 znajduje si po prawej stronie okna VisualGC. Przedstawia on wykresy statystyk wydajnoci w funkcji czasu i oferuje historyczny przegld danych.
Panel ten wywietla statystyki procesów odzyskiwania pamici wraz ze statystykami kompilatora
JIT i adowarki klas. Te dwie ostatnie statystyki zostan omówione w dalszej czci rozdziau. Rozdzielczo osi poziomej dla kadego ze znajdujcych si w tym panelu wykresów definiowana jest
parametrem Refresh Rate znajdujcym tu nad panelem Spaces. Kada próbka dla historycznego
wykresu danych w panelu Graphs zajmuje dwa piksele rozdzielczoci ekranu. Wysoko kadego
wykresu zaley od ilustrowanych danych statystycznych.
Panel Graphs zawiera nastpujce wykresy.
„
Compile Time (czas kompilacji). Omówiony w dalszej czci rozdziau.
„
Class Loader Time (czas adowarki klas). Omówiony w dalszej czci rozdziau.
„
GC Time (czas odzyskiwania pamici). Wykres ilustrujcy ilo czasu powicanego na
dziaania zwizane z procesami odzyskiwania pamici. Wysoko tego wykresu, czyli o
pionowa, nie jest skalowana do adnej konkretnej wartoci. Warto róna od zera wskazuje
na wykresie na dziaania mechanizmu odzyskiwania pamici w ostatnim interwale czasowym.
Wski impuls wskazuje na relatywnie krótki czas trwania procesu, natomiast impuls szeroki
to dugi czas trwania. W opisie wykresu podano cakowit liczb procesów odzyskiwania
pamici oraz czny czas trwania tych procesów od momentu uruchomienia aplikacji.
Jeli monitorowana maszyna wirtualna Javy gromadzi statystyki dotyczce przyczyn
uruchamiania procesów odzyskiwania pamici, w opisie podawana jest równie przyczyna
uruchomienia ostatniego procesu odzyskiwania pamici.
„
Eden Space (przestrze eden). Wykres przedstawiajcy wykorzystanie przestrzeni edenu
w funkcji czasu. Wysoko tego wykresu jest staa, a domylnie dane s skalowane zgodnie
z aktualnym rozmiarem tej przestrzeni. Rozmiar przestrzeni edenu moe si zwiksza lub
zmniejsza w zalenoci od stosowanego w danym momencie mechanizmu odzyskiwania
pamici. W opisie wykresu znajduje si nazwa przestrzeni, podany w nawiasach maksymalny
i biecy rozmiar przestrzeni oraz biece zapenienie przestrzeni. Dodatkowo podana jest
tu czna liczba procesów mniejszego odzyskiwania pamici oraz ich skumulowany czas.
„
Survivor 0 and Survivor 1 (przestrzenie ocalaych S0 i S1). Na tych wykresach przedstawiono
wykorzystanie dwóch przestrzeni ocalaych w funkcji czasu. Wysoko kadego z tych
wykresów jest staa, a domylnie dane s skalowane zgodnie z biecym rozmiarem obu
przestrzeni. Rozmiar przestrzeni ocalaych moe zmienia si wraz z upywem czasu
w zalenoci od stosowanego mechanizmu odzyskiwania pamici. W opisie kadego
z wykresów podano nazw przestrzeni, maksymalny i aktualny rozmiar przestrzeni
w nawiasach oraz biece wykorzystanie przestrzeni.
„
Old Gen (przestrze starego pokolenia). Wykres przedstawia wykorzystanie przestrzeni
starego pokolenia w funkcji czasu. Wysoko wykresu jest staa, a domylnie dane s
Kup książkę
Poleć książkę
Odzyskiwanie pamici
149
skalowane zgodnie z aktualnym rozmiarem tej przestrzeni. Rozmiar przestrzeni starego
pokolenia moe si zmienia w zalenoci od stosowanego mechanizmu odzyskiwania
pamici. W opisie wykresu znajduje si nazwa przestrzeni, podany w nawiasach maksymalny
i biecy rozmiar przestrzeni oraz biece zapenienie przestrzeni. Dodatkowo podana
jest tu czna liczba procesów penego odzyskiwania pamici oraz ich skumulowany czas.
„
Perm Gen (przestrze staego pokolenia). Wykres przedstawia wykorzystanie przestrzeni
staego pokolenia w funkcji czasu. Wysoko wykresu jest staa, a domylnie dane s
skalowane zgodnie z aktualnym rozmiarem tej przestrzeni. Rozmiar przestrzeni staego
pokolenia moe si zmienia w zalenoci od stosowanego mechanizmu odzyskiwania
pamici. W opisie wykresu znajduje si nazwa przestrzeni, podany w nawiasach maksymalny
i biecy rozmiar przestrzeni oraz biece zapenienie przestrzeni.
Panel Histogram pokazany na rysunku 4.15 znajduje si pod panelami Spaces i Graphs i jest
wywietlany tylko w podczas stosowania równoczesnego lub szeregowego mechanizmu odzyskiwania pamici. W przypadku przepustowociowego odzyskiwania pamici nie przechowuje si danych
na temat wieku obiektów ocalaych, poniewa stosowany jest tu inny mechanizm do zarzdzania
obiektami w przestrzeniach ocalaych. Z tego powodu panel Histogram nie jest wywietlany, kiedy
monitorowana maszyna wirtualna Javy stosuje przepustowociowy mechanizm odzyskiwania pamici.
W panelu Histogram wywietlane s statystyki dotyczce ocalaych obiektów oraz wieku
obiektów. Jest on podzielony na dwa obszary: Parameters (parametry) i Histogram. W obszarze Parameters podane s informacje na temat biecego rozmiaru przestrzeni ocalaych oraz parametrów,
które kontroluj promowanie obiektów z przestrzeni modego pokolenia do przestrzeni starego
pokolenia. Po kadym mniejszym odzyskiwaniu wzrasta wiek obiektu, pod warunkiem e obiekt
pozostaje ywy. Jeli wiek obiektu przekroczy okrelony wiek dla progu zatrudnienia (ang. tenuring
threshold age), obiekt zostaje promowany do starego pokolenia. Wiek dla progu zatrudnienia jest
wyliczany przez JVM podczas kadego procesu mniejszego odzyskiwania pamici i wywietlany
w obszarze Parameters pod nazw Tenuring Threshold. Maksymalny próg zatrudnienia (ang. Max
Tenuring Threshold) równie wywietlany w tym obszarze to maksymalny wiek dla obiektów przechowywanych w przestrzeniach ocalaych. Obiekty s promowane z modego do starego pokolenia
na podstawie wartoci parametru Tenuring Threshold, a nie Max Tenuring Threshold.
Czsto powtarzajca si sytuacja, w której próg zatrudnienia jest niszy ni maksymalny próg
zatrudnienia, wskazuje, e obiekty s promowane z modego do starego pokolenia zbyt szybko.
Jest to zazwyczaj spowodowane przepenieniem przestrzeni ocalaych. Jeli przestrze ocalaych
jest przepeniona, najstarsze obiekty s promowane do starego pokolenia do momentu, a wykorzystanie przestrzeni ocalaych nie spadnie poniej wartoci Desired Survivor Size (podany rozmiar przestrzeni ocalaych) wywietlanej w obszarze Parameters. Jak wczeniej wspominalimy,
przepenienie przestrzeni ocalaych moe powodowa zapenienie przestrzeni starego pokolenia
i w rezultacie wywoa uruchomienie procesu penego odzyskiwania pamici.
Obszar Histogram w panelu Histogram wywietla zrzut ekranu dla dystrybucji wieku obiektów
w aktywnej przestrzeni ocalaych po ostatnim procesie mniejszego odzyskiwania pamici. Jeli
mamy do czynienia z JVM dla Java 5 Update 6 lub nowsz, obszar ten zawiera szesnacie regionów
o identycznym rozmiarze, z których kady reprezentuje jeden z moliwych wieków obiektów. We
wczeniejszych wersjach monitorowanej maszyny wirtualnej Javy bdziemy mieli w obszarze Histogram trzydzieci dwa regiony. Kady region reprezentuje 100% aktywnego obszaru przestrzeni
ocalaych. Poziom wypenienia regionu kolorem wskazuje procentowy stopie zapenienia przestrzeni ocalaych obiektami o okrelonym wieku.
Kup książkę
Poleć książkę
150
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Podczas dziaania aplikacji moesz obserwowa, jak dugo yjce obiekty przechodz przez
kady z regionów wieku. Im wiksza przestrze zajmowana jest przez dugo yjce obiekty, tym
wiksza bdzie migracja obiektów pomidzy regionami wieku. Kiedy próg zatrudnienia jest mniejszy ni maksymalny próg zatrudnienia, regiony reprezentujce wartoci wysze ni próg zatrudnienia pozostan puste, poniewa obiekty z tych regionów zostan promowane do przestrzeni starego pokolenia.
Kompilator JIT
Istnieje kilka sposobów monitorowania aktywnoci kompilacji JIT dla maszyny wirtualnej HotSpot.
Mimo e kompilacja JIT przyspiesza dziaanie aplikacji, wymaga okrelonych zasobów obliczeniowych, takich jak cykle CPU i pami. Z tego powodu uyteczne jest obserwowanie zachowania
kompilatora JIT. Monitorowanie kompilacji JIT jest take uyteczne, kiedy chcesz zidentyfikowa
metody, które s optymalizowane, a w niektórych przypadkach deoptymalizowane lub optymalizowane ponownie. Metoda moe by deoptymalizowana lub optymalizowana ponownie, jeli kompilator JIT wykona dla optymalizacji pewne wstpne zaoenia, które okazay si bdne. W takiej
sytuacji kompilator JIT odrzuca tak optymalizacj i ponownie wykonuje optymalizacj metody
na podstawie nowo pozyskanych informacji.
Do monitorowania kompilatora JIT HotSpot moesz wykorzysta opcj wiersza polece
-XX:+PrintCompilation. Opcja ta generuje po jednej linii listingu dla kadej wykonanej kompilacji.
Przykad listingu znajduje si poniej:
7
java.lang.String::indexOf (151 bytes)
8% !
sun.awt.image.PNGImageDecoder::produceImage @ 960 (1920 bytes)
9 !
sun.awt.image.PNGImageDecoder::produceImage (1920 bytes)
10
java.lang.AbstractStringBuilder::append (40 bytes)
11
n java.lang.System::arraycopy (static)
12 s
java.util.Hashtable::get (69 bytes)
13
b java.util.HashMap::indexFor (6 bytes)
14
made zombie java.awt.geom.Path2D$Iterator::isDone (20 bytes)
Szczegóowe informacje dotyczce listingu dla opcji -XX:+PrintCompilation znajdziesz w dodatku A.
Istniej te graficzne narzdzia do monitorowania aktywnoci kompilacji JIT, nie dostarczaj
one jednak tyle szczegóów, co opcja -XX:+PrintCompilation. Obecnie JConsole, VisualVM czy
wtyczka VisualGC do VisualVM nie dostarczaj informacji na temat tego, które metody s kompilowane przez kompilator JIT. Zapewniaj one jedynie informacje o tym, kiedy kompilacja JIT ma
miejsce. Najbardziej uytecznym narzdziem graficznym w tym przypadku moe okaza si wykres Compile Time (czas kompilacji) z panelu Graphs okna VisualGC, pokazany na rysunku 4.16.
Wykres ten przedstawia impulsy generowane aktywnoci kompilacji JIT, które uatwiaj okrelenie miejsca wystpowania tych aktywnoci.
Rysunek 4.16. Wykres Compile Time w panelu Graphs wtyczki VisualGC
Wykres Compile Time w VisualGC pokazuje, jaka ilo czasu zostaa przeznaczona na kompilacj. Wysoko wykresu nie jest skalowana do adnej konkretnej wartoci. Impulsy na wykresie
Kup książkę
Poleć książkę
adowanie klas
151
reprezentuj aktywnoci kompilacji JIT. Wski impuls wskazuje na relatywnie krótki czas aktywnoci, a szeroki impuls — na dugi czas aktywnoci. Obszary, na których nie ma adnych impulsów,
symbolizuj brak aktywnoci kompilacji JIT. W opisie wykresu umieszczono cakowit liczb zada
kompilacji JIT oraz skumulowany czas, który upyn na aktywnociach kompilacji.
adowanie klas
Wiele aplikacji korzysta ze zdefiniowanych przez uytkownika adowarek klas zwanych custom
class loaders. JVM aduje klasy z adowarki klas i moe równie zdecydowa o wyadowaniu klasy.
To, czy klasy s adowane, czy rozadowywane, zaley od rodowiska JVM Runtime oraz zastosowanych adowarek klas. Monitorowanie aktywnoci adowania klas moe by uyteczne, szczególnie w aplikacjach, które korzystaj z adowarek klas zdefiniowanych przez uytkownika. Obecnie
HotSpot VM aduje wszystkie metadane klas do przestrzeni staego pokolenia. Odzyskiwanie pamici w przestrzeni staego pokolenia przeprowadzane jest wtedy, kiedy przestrze ta si zapeni.
Dlatego te monitorowanie zarówno aktywnoci adowania klas, jak i wykorzystania przestrzeni
staego pokolenia moe by istotne dla osignicia przez aplikacj wymaga dotyczcych wydajnoci. Statystyki odzyskiwania pamici wskazuj, kiedy klasy s wyadowywane z przestrzeni staego pokolenia.
Niewykorzystane klasy s wyadowywane z przestrzeni staego pokolenia, kiedy wymagane jest
dodatkowe miejsce na zaadowanie innych klas. Do wyadowania klas z przestrzeni staego pokolenia niezbdne jest pene odzyskiwanie pamici. W takim przypadku aplikacja moe dowiadcza problemów z wydajnoci spowodowanych procesem penego odzyskiwania pamici. Na poniszym listingu przedstawiono pene odzyskiwanie pamici, podczas którego przeprowadzone
zostao wyadowywanie klas.
[Full GC[Unloading class sun.reflect.GeneratedConstructorAccessor3]
[Unloading class sun.reflect.GeneratedConstructorAccessor8]
[Unloading class sun.reflect.GeneratedConstructorAccessor11]
[Unloading class sun.reflect.GeneratedConstructorAccessor6]
8566K->5871K(193856K), 0.0989123 secs]
Powyszy listing wskazuje, e zostay wyadowane cztery klasy: sun.reflect.Generated
´ConstructorAccessor3, sun.reflect.Generated ConstructorAccessor8, sun.reflect.Generated
´ConstructorAccessor11 oraz sun.reflect.GeneratedConstructorAccessor6. Raportowanie klas,
które s wyadowywane podczas penego odzyskiwania pamici, moe dowodzi, e rozmiar przestrzeni staego pokolenia powinien by wikszy lub wikszy powinien by pocztkowy rozmiar
tej przestrzeni. Jeli zauwaysz, e podczas penego odzyskiwania pamici zostay wyadowane
klasy, powiniene zastosowa opcje wiersza polece -XX:PermSize oraz -XX:MaxPermSize, eby
zdefiniowa rozmiar przestrzeni staego pokolenia. Aby unikn penego odzyskiwania pamici,
które moe poszerzy lub zmniejszy przydzielony rozmiar przestrzeni staego pokolenia, ustaw
takie same wartoci dla -XX:PermSize oraz -XX:MaxPermSize. Zwró uwag, e jeli wczone jest
równoczesne odzyskiwanie pamici dla staego pokolenia, moesz zaobserwowa wyadowywanie
klas podczas cyklu równoczesnego odzyskiwania pamici dla staego pokolenia. Poniewa cykl
równoczesnego odzyskiwania pamici dla staego pokolenia nie jest wykonywany metod „stopthe-world”, aplikacja nie odczuwa skutków przestoju wywoywanego procesem odzyskiwania pamici. Równoczesne odzyskiwanie pamici dla starego pokolenia moe by stosowane jedynie
przez przewanie-równoczesny mechanizm odzyskiwania pamici, zwany CMS.
Kup książkę
Poleć książkę
152
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Wskazówka
Dodatkowe wskazówki i porady na temat regulacji rozmiaru przestrzeni staego pokolenia wraz
z instrukcj, jak uruchomi równoczesne odzyskiwanie pamici dla staego pokolenia, znajdziesz
w rozdziale 7.
Monitorowanie adowania klas umoliwiaj takie narzdzia graficzne jak JConsole, VisualVM
oraz wtyczka VisualGC dla VisualVM. Jednak aktualnie nie podaj one nazw klas, które s adowane lub wyadowywane. Jak pokazano na rysunku 4.17, zakadka Classes (klasy) w JConsole
podaje liczb aktualnie zaadowanych klas, liczb klas wyadowanych oraz cakowit liczb zaadowanych klas.
Rysunek 4.17. Cakowita liczba zaadowanych klas i liczba aktualnie zaadowanych klas
VisualVM równie umoliwia monitorowanie aktywnoci adowania klas w oknie Classes (klasy)
zakadki Monitor. Okno to pokazuje cakowit liczb zaadowanych klas oraz liczb zaadowanych
klas wspódzielonych. Moesz tutaj sprawdzi, czy w monitorowanie w maszynie wirtualnej Javy
zostao wczone udostpnianie danych klas (ang. class data sharing). Funkcja udostpniania danych
klas polega na wspódzieleniu klas pomidzy kilkoma maszynami wirtualnymi Javy dziaajcymi
na tym samym systemie. Pozwala to zmniejszy wykorzystanie pamici przez JVM-y. Jeli monitorowana maszyna wirtualna Javy korzysta z udostpnianych klas, na wykresie poza poziom lini
symbolizujc cakowit liczb zaadowanych klas pojawi si pozioma linia reprezentujca liczb
klas wspódzielonych. Tego typu sytuacj przedstawiono na rysunku 4.18.
Monitorowanie aktywnoci adowania klas jest take moliwe na wykresie Class Loader Time
w panelu Graphs wtyczki VisualGC, co pokazano na rysunku 4.19.
Kup książkę
Poleć książkę
Monitorowanie aplikacji Java
153
Rysunek 4.18. Zaobserwowane wspódzielenie klas
Rysunek 4.19. Aktywno adowania klas w VisualGC
Impulsy na wykresie Class Loader Time symbolizuj aktywno adowania lub wyadowywania
klas. Wski impuls wskazuje na krótki czas aktywnoci, a szeroki impuls — na dugi czas aktywnoci. Brak impulsu oznacza brak aktywnoci adowania klas. W opisie wykresu podana zostaa
liczba zaadowanych klas, liczba wyadowanych klas oraz czny czas dla adowania klas od momentu uruchomienia aplikacji. Obserwowanie na wykresie Class Loader Time impulsów, które bezporednio odpowiadaj impulsom na znajdujcym si poniej w tym panelu wykresie GC Time,
wskazuje na aktywno mechanizmu odzyskiwania pamici w tym samym czasie. Moe to by
spowodowane przeprowadzaniem procesu odzyskiwania pamici dla staego pokolenia JVM.
Monitorowanie aplikacji Java
Monitorowanie na poziomie aplikacji z reguy wie si z obserwowaniem dziennika zdarze
(logów), który zawiera interesujce nas zdarzenia lub instrumentalizacj zapewniajc okrelony
poziom informacji na temat wydajnoci aplikacji. Niektóre aplikacje mog równie posiada
wewntrzne funkcje monitorowania i zarzdzania wbudowane za pomoc MBeanów poprzez
interfejsy monitorowania i zarzdzania API dla Java SE. Te MBeany mog by przegldane i monitorowane za pomoc narzdzi zgodnych z technologi JMX, takich jak JConsole, lub za pomoc
wtyczki VisualVM-MBeans dla VisualVM. Wtyczk t mona znale
w centrum wtyczek w opcji
Plugins dla menu Tools.
GlassFish Server Open Source Edition (zwany dalej GlassFish) posiada du liczb atrybutów,
które mog by monitorowane za pomoc MBeanów. Korzystajc z JConsole lub VisualVM do
monitorowania instancji serwera aplikacji, GlassFish umoliwia przegldanie MBeanów wraz
z ich atrybutami i operacjami. Na rysunku 4.20 przedstawiono cz z wielu MBeanów GlassFish
w oknie MBeans narzdzia VisualVM korzystajcego z wtyczki VisualVM-MBeans.
Kup książkę
Poleć książkę
154
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
Rysunek 4.20. MBeany GlassFish
Po lewej stronie wida rozwinit list MBeanów GlassFish w folderze com.sun.appserv.
Moliwoci VisualVM mog równie zosta poszerzone o monitorowanie aplikacji Java, poniewa
narzdzie to zostao zbudowane na bazie architektury wtyczek NetBeans Platform. Wtyczki dla
VisualVM mog by tworzone, tak jakby byy to wtyczki NetBeans. Przykadowo niestandardowa
wtyczka do VisualVM umoliwiajca monitorowanie aplikacji Java moe wykorzysta wiele bogatych
funkcji NetBeans, wcznie z Visual Graph Library. Dla aplikacji, które maj udostpnia informacje dotyczce monitorowania wydajnoci, mona przygotowa odpowiedni wtyczk VisualVM.
Kilka istniejcych ju wtyczek jest dostpnych w centrum wtyczek VisualVM.
Aplikacje posiadajce wtyczki JConsole mog skorzysta z wtyczki VisualVM-JConsole, aby
automatycznie zintegrowa wasne niestandardowe wtyczki JConsole z VisualVM.
Szybkie monitorowanie rywalizacji o blokady
Sztuczk czsto stosowan przez autorów w celu uzyskania szybkiego pogldu na to, gdzie w aplikacji Java pojawia si rywalizacja o blokady, jest przechwycenie kilku zrzutów wtku za pomoc
komendy JDK jstack. Takie podejcie dobrze si sprawdza, kiedy wykonujesz wiele zada monitorujcych i potrzebujesz szybko przechwyci okrelone dane, bez koniecznoci powicania czasu
na instalowanie i konfiguracj aplikacji profilujcej, która przeznaczona jest do bardziej szczegóowej analizy.
Poniszy listing z polecenia jstack pochodzi z aplikacji, która posiada zestaw wtków odczytu
i zapisu dzielcych jedn kolejk. Wtki zapisu dodaj zadania do kolejki, a wtki odczytu ujmuj zadania z kolejki.
Kup książkę
Poleć książkę
Monitorowanie aplikacji Java
155
Zamieszczone zostay tylko istotne lady stosu, aby zilustrowa uyteczno komendy jstack
do szybkiego odnajdywania blokad, o które toczy si rywalizacja. W listingu wtek Read Thread-33
uzyska z powodzeniem blokad wspódzielonej kolejki, która jest okrelona jako obiekt Queue
o adresie 0x22e88b10. Jest to zaznaczony wytuszczonym drukiem fragment listingu locked
<0x22e88b10> (a Queue).
Wszystkie pozostae przedstawione lady stosu wtku czekaj na uzyskanie tej samej blokady,
któr posiada wtek Read Thread-33. S to oznaczone wytuszczonym drukiem fragmenty listingu
waiting to lock <0x22e88b10> (a Queue).
"Read Thread-33" prio=6 tid=0x02b1d400 nid=0x5c0 runnable
[0x0424f000..0x0424fd94]
java.lang.Thread.State: RUNNABLE
at Queue.dequeue(Queue.java:69)
- locked <0x22e88b10> (a Queue)
at ReadThread.getWorkItemFromQueue(ReadThread.java:32)
at ReadThread.run(ReadThread.java:23)
"Writer Thread-29" prio=6 tid=0x02b13c00 nid=0x3cc waiting for monitor
entry [0x03f7f000..0x03f7fd94]
java.lang.Thread.State: BLOCKED (on object monitor)
at Queue.enqueue(Queue.java:31)
- waiting to lock <0x22e88b10> (a Queue)
at WriteThread.putWorkItemOnQueue(WriteThread.java:54)
at WriteThread.run(WriteThread.java:47)
"Writer Thread-26" prio=6 tid=0x02b0d400 nid=0x194 waiting for monitor
entry [0x03d9f000..0x03d9fc94]
java.lang.Thread.State: BLOCKED (on object monitor)
at Queue.enqueue(Queue.java:31)
- waiting to lock <0x22e88b10> (a Queue)
at WriteThread.putWorkItemOnQueue(WriteThread.java:54)
at WriteThread.run(WriteThread.java:47)
"Read Thread-23" prio=6 tid=0x02b08000 nid=0xbf0 waiting for monitor entry
[0x03c0f000..0x03c0fb14]
java.lang.Thread.State: BLOCKED (on object monitor)
at Queue.dequeue(Queue.java:55)
- waiting to lock <0x22e88b10> (a Queue)
at ReadThread.getWorkItemFromQueue(ReadThread.java:32)
at ReadThread.run(ReadThread.java:23)
"Writer Thread-24" prio=6 tid=0x02b09000 nid=0xef8 waiting for monitor
entry [0x03c5f000..0x03c5fa94]
java.lang.Thread.State: BLOCKED (on object monitor)
at Queue.enqueue(Queue.java:31)
- waiting to lock <0x22e88b10> (a Queue)
at WriteThread.putWorkItemOnQueue(WriteThread.java:54)
at WriteThread.run(WriteThread.java:47)
"Writer Thread-20" prio=6 tid=0x02b00400 nid=0x19c waiting for monitor
entry [0x039df000..0x039dfa14]
java.lang.Thread.State: BLOCKED (on object monitor)
at Queue.enqueue(Queue.java:31)
- waiting to lock <0x22e88b10> (a Queue)
at WriteThread.putWorkItemOnQueue(WriteThread.java:54)
at WriteThread.run(WriteThread.java:47)
Kup książkę
Poleć książkę
156
Rozdzia 4. Monitorowanie wydajnoci maszyny wirtualnej Javy
"Read Thread-13" prio=6 tid=0x02af2400 nid=0x9ac waiting for monitor entry
[0x035cf000..0x035cfd14]
java.lang.Thread.State: BLOCKED (on object monitor)
at Queue.dequeue(Queue.java:55)
- waiting to lock <0x22e88b10> (a Queue)
at ReadThread.getWorkItemFromQueue(ReadThread.java:32)
at ReadThread.run(ReadThread.java:23)
"Read Thread-96" prio=6 tid=0x047c4400 nid=0xaa4 waiting for monitor
entry [0x06baf000..0x06bafa94]
java.lang.Thread.State: BLOCKED (on object monitor)
at Queue.dequeue(Queue.java:55)
- waiting to lock <0x22e88b10> (a Queue)
at ReadThread.getWorkItemFromQueue(ReadThread.java:32)
at ReadThread.run(ReadThread.java:23)
Naley zwróci uwag, e wszystkie adresy blokady podane w nawiasach trójktnych w zapisie szesnastkowym s takie same. W ten sposób blokady s unikatowo identyfikowane w listingu
dla jstack. Jeli adresy blokad w ladach stosu s róne, znaczy to, e reprezentuj róne blokady.
Innymi sowy, lady stosu wtków, które maj inne adresy blokad, dotycz wtków nierywalizujcych o t sam blokad.
Kluczem do odnalezienia w listingu dla jstack blokad, o które toczy si rywalizacja, jest poszukiwanie tego samego adresu blokady dla kilku ladów stosu i odnalezienie wtków oczekujcych
na nabycie tego samego adresu blokady. Jeli kilka ladów stosu wtków próbuje naby ten sam
adres blokady, oznacza to, e w aplikacji zachodzi rywalizacja o blokady. Jeli kilka listingów dla
polecenia jstack daje podobne rezultaty w postaci obserwowanej rywalizacji o t sam blokad,
jest to silne wskazanie, e w aplikacji istnieje blokada charakteryzujca si wysokim poziomem rywalizacji wród wtków. Zwró te uwag, e lad stosu podaje lokalizacj kodu ródowego takiej
blokady aplikacji Java, a patrzc z perspektywy historycznej, uzyskanie tej informacji byo zawsze
do trudnym zadaniem. Korzystanie z komendy jstack w sposób opisany powyej moe znacznie
uatwi odnajdywanie w aplikacji blokad, o które toczy si rywalizacja.
Bibliografia
„Monitoring and Management for the Java Platform”,
http://download.oracle.com/javase/1.5.0/docs/guide/management/.
„Java SE Monitoring and Management Guide”,
http://download.oracle.com/javase/6/docs/technotes/guides/management/toc.html.
„Connecting to JMX Agents Explicitly”,
http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html.
VisualVM, https://visualvm.dev.java.net/features.html.
jvmstat 3.0, http://java.sun.com/performance/jvmstat.
Kup książkę
Poleć książkę
Skorowidz
A
adaptacyjne ustalanie rozmiaru, 115, 269
agregacja plików dziennika, 405
akcja
doczania, 387
jsp:useBean, 389
aktualizacja rekordu podatnika, 218
aktualizacje zbiorcze, 488
aktywnoci dysku, 359
alokacje
char[], 224
obiektów, 254
pamici, 89
rejestru, 105
struktur HashMap, 227
w stosie wtku, 293
alokator obiektów, 97
analiza
hierarchii klas, 105
metryk blokad, 213
skalowalnoci, 343
ucieczki, 292
wydajnoci
bottom up, 29
top down, 29
wyników, 217
zrzutu sterty, 201
zrzutu wtku, 360
analizator, analyzer, 159
API wywoania, Invocation API, 90
aplikacja
GlassFish, 347
Java RMI server, 139
jstatd daemon, 138
NetBeans Profiler, 158, 185, 362
Oracle Solaris Performance Analyzer, 158
Oracle Solaris Studio Performance Analyzer, 159
Performance Analyzer, 162–176, 212, 217–234
VisualVM, 186
Kup książkę
aplikacje
enterprise, 352, 355, 362
internetowe, 365
klient–serwer, 62
o niskich wymaganiach, 291
wielowarstwowe, 325
architektura
HotSpot VM, 72
NUMA, 291
atrybut
beanName, 391
format, 403
relative-catalogs, 417
scope, 391
transakcji, 467
B
badanie zmian wydajnoci, 342
bariera
pamici, 222
zapisu, write barrier, 95
beany
encyjne, 477
enterprise, 468
sesyjne, 451
bezstanowe, 452
stanowe, 452
sterowane komunikatami, 451
benchmark, 298, 326
asynchroniczny, 346
prawo Little’a, 339
skalowanie, 337
typu enterprise, 328
usugi internetowej, 425, 427
uruchamianie, 343
wielowarstwowy, 344
benchmarki dla EJB, 466
bezpieczestwo, 139
Poleć książkę
512
Wydajno Javy
bezpieczestwo typów, 79
bezporednie wywoywanie procesów, 281
biae znaki, whitespaces, 388
biblioteka
JSP, 392
NIO, 369
biblioteki malloc, 399
binarne zrzuty sterty, 144, 202
blokada, 55
JVM-System, 215
przecigana, biased locking, 85, 293
blokady problematyczne, 58
blokowanie, locking, 51
bazy danych, 474, 489
optymistyczne, 465, 474
pesymistyczne, 474
bd
drugiego rodzaju, 322
krytyczny, 91
OutOfMemoryError, 92
pierwszego rodzaju, 322
segmentacji, segmentation fault, 91
VerifyError, 81
Bootstrap Class Loader, 79
buforowanie
danych, 207
interfejsu Handle, 468
pamici, 395
plików, 401
referencji, 468
schematów, 414
C
CAS, 219
charakterystyki
aplikacji, 326–328
wydajnoci, 430
cienki klient, 426
CLI, Command Line Interface, 350
CMP, container-managed persistence, 472
CMS, 121–125, 277, 284
cofanie transakcji, 474
CPI, cycles per instruction, 37, 204
CPU, 37, 204
CPU scheduler, 48
cykl
CMS, 125, 278–280
CPU, 36
przetwarzania XML, 408
zegara, 56
ycia maszyny wirtualnej, 75
ycia serwletu, 386
Kup książkę
czas
ekskluzywny, 160, 161
inkluzywny, 160, 161
adowania fabryki, 410
adowania stron, 367
na zastanowienie, 331, 333, 340
odpowiedzi, response time, 335, 427
penego przebiegu, 333
procesora, 40
przebiegu aplikacji, 211
przestojów, 98, 130, 260
przestojów CMS, 282
reakcji, 242, 259
równoczesny aplikacji, 128
stabilnoci, 345
trwania procesu, 262, 283
uprzywilejowany, 39
uruchamiania, startup time, 237, 242
uytkownika, 39
wasny, 160
zatrzymania, 128
zmniejszania obcienia, 345
zwikszania obcienia, 345
czstotliwo
opó
nie, 260
procesów, 262
próbkowania, 188
przestojów, 260
czyszczenie wstpne, pre-cleaning, 100
D
DAO, Data Access Objects, 471
debugger dbx, 91
debugowanie HotSpot VM, 309
definicja
filtru, 177
Java Collections, 226
schematu, 442
delegowanie adowarki klas, 79
deoptymalizacja, 106, 311, 315
dugo
odpowiedzi, 385
cieki, path length, 30
dodatek
Firebug, 331
Live HTTP Headers, 331
dodawanie liczników, 49
doczanie, include, 387
DOM, 412
domylne wartoci ergonomiczne, 113
domylny
mechanizm odzyskiwania, 112, 114
wspóczynnik zapenienia, 228
Poleć książkę
Skorowidz
dostp
do ziarna, 391
gruboziarnisty, 471
dostpno, availability, 241
driver framework, 337
drzewo wywoa, call tree, 159, 170
dyrektywa
doczania, 387
usuwania, 388
dysk, 359
logiczny, 63
SDD, 360
dystrybucja zatrudnienia, 125, 276
dziedziczenie, 490
dziennik
bdów, 91
odzyskiwania pamici, 257
E
EclipseLink, 464
eden, 147, 269
EJB, Enterprise Java Beans, 451
EJB 3.0, 478
EJB QL, 476
eksplozja obiektu, 293
EL, expression language, 391
element
any, 432
Summary, 419
eliminacja
barier odczytu, 293
sprawdzania zakresu, 104
synchronizacji, 293
wspólnych podwyrae, 104
encje
trwae, 451
tylko do odczytu, 477
zewntrzne, 415
ergonomiczne wartoci domylne, 111
estymacja
rónicy rednich, 320
redniej, 320
etapy profilowania, 161
F
fabryka abstrakcyjna, 409
Fast Infoset, 446, 448
faza
inicjacji, 240
podsumowujca, 240
ponownego zaznaczania, 282
Kup książkę
513
równoczesnego zamiatania, 101
równoczesnego zaznaczania, 100
znaku inicjujcego, 282
zrównowaona, 240
fazy adowania klas, 78
FetchType, 485
FIFO, first in first out, 462
filtr, filter, 159
kompresji, 395
serwletu, 404
filtrowanie, filtering, 177
danych profilu, 177
zakresu próbki, 234
format
czasu, 249
daty, 249
fragmentacja, 101, 268
funkcja
ergonomii, 111
File Cache, 401
funkcje VisualVM, 137
G
gboko kolejki, 42, 48
gniazdo poczenia, 355
GNOME System Monitor, 43
gorce miejsce, hot spot, 160
gruby klient, 426
H
HashMap, 214, 228
hierarchia klas, 105
hipoteza zerowa, 321
Historia CPU, 41
host wirtualny, 367
HotSpot debug VM, 309
HotSpot VM, 17, 55, 71
HotSpot VM Runtime, 72
HTTP service, 373
hybrydowy model skalowania, 343
I
identyfikacja zmian rozmiaru, 227
ilociowe okno próbkowania, 382
implementacja
beanu, 452
JAX-WS, 423
mikrobenchmarku, 312
punktu kocowego, 433
inicjowanie klas, 78
Poleć książkę
514
Wydajno Javy
instalacja
NetBeans Profiler, 186
Oracle Solaris Studio Performance Analyzer, 162
instrukcja
adowania, 204
wstpnego pobrania, 204
instrumentalizacja, instrumentation, 160
inteligentne wstawianie, 105
interakcja dysku, 65
interakcja z uytkownikiem, 329
interceptory metod biznesowych, 479
interfejs
Analyzera, 168
javax.ejb.Handle, 469
JNI, 90
narzdziowy JVMTI, 161
Provider, 444, 445
Shape, 311
Unmarshaller, 411
wiersza polece, 350
interfejsy
API, 418, 420
lokalne, 478
zdalne, 478
interpreter, 82
interwa pomiarowy, 298
IPC, instructions per clock, 37
IR, intermediate representation, 104
izolacja transakcji, 465
izolowanie
gorcych blokad, 58
systemu testowego, 344
wycieków pamici, 201
J
Java Collections, 226
Java Enterprise Edition, 325
Java Native Interface, 90
Java NIO, 211
Java SE, 220
JAXP, Java API for XML Binding, 408
JAX-WS RI, 423
jdro, kernel, 37
JDBC, Java Database Connectivity, 473
jzyk
WSDL, 407, 430
wyrae EL, 391, 393
zapyta EJB, 475
JMX, Java Management eXtensions, 349
JNDI, Java Naming and Directory Interface, 459
JNI, Java Native Interface, 76, 90
JPA, Java Persistence API, 453
Kup książkę
JSTL, JSP Standard Tag Library, 392
JVM, Java Virtual Machine, 71, 117, 237
JVMTI, JVM Tool Interface, 161
K
karty, cards, 94
katalogi XML, 415
klasa
Arena, 89
HashMap, 214, 216
StringBuffer, 223
StringBuilder, 223
klasy
implementacji fabryki parsera, 410
Java Collections, 226
rdzenia Java, 188
klienty JAX-WS, 426, 448
kod
fast-path, 85
obsugi bdów, 92
kodowanie
binarne, 446
wiadomoci, 437
kody odpowiedzi, 378
kolorowanie wykresu, 110
komenda
asadmin, 351
asadmin set, 403
collect, 163, 362
csingle, 182
get, 352
iostat, 63
javaws, 75
JDK jstack, 154
jstack, 48, 156
ping, 354
typeperf, 41
vmstat, 45, 53
kompilacja warstwowa, 110
kompilacje OSR, 106
kompilator
javac, 80
JIT, 72, 83, 104, 150
kompilatory Javy, 80
kompresja
GZIP, 394
HTTP, 394, 448
w locie, 394
kompresor LZF, 399
konektor, 367
blokujcy, 368
HTTP, 368
Poleć książkę
Skorowidz
konfiguracja JMX, 142
konfigurowanie opcji zdalnego profilowania, 189
kontekst, 55
kontener
EJB 3.0, 479
webowy, 367, 373
konwersja dokumentów XML, 408
korporacja SPEC, 297
koszt
instancjonowania ziarna, 390
adowania klasy, 81
transmisji sieciowej, 397
wykorzystania pamici, 82
krótsza cieka, 203
L
launcher, 75
leniwe adowanie, 472
liczba
aktywnych beanów, 462
instrukcji SQL, 488
iteracji, 304, 313
obserwacji, 319
obsuonych da, 380
ocalaych bajtów, 274, 288
optymalizacji ptli, 109
procesorów wirtualnych, 111
procesów, 130
uytkowników, 339
wtków, 290, 374
wtków ORB, 487
wirtualnych procesorów, 41
zaadowanych klas, 152
licznik
backedge, 106
wydajnoci, 49
wywoa, invocation counter, 106
lokalizacja pamici, 219
LRU, least recently used, 462
lustro Javy, Java mirror, 80
adowanie, loading, 78
klas, 78, 151
wza, 418
adowarka bootstrap, 79
acuch Markowa, 330, 366
czenie, linking, 78
czenie w acuch, chaining, 207
Kup książkę
515
M
macierz dyskowa, 360
magazyn danych, 222, 228
mapa tosamoci
mikka, 455
pena, 455
saba, 455
mapowanie
relacyjnej bazy danych, 453
schematów, 432
schematów XML, 431
typów Javy, 441
martwy kod, 308
maszyna wirtualna, 71
HotSpot, 252
Javy, 212, 237, 352
MBeany, 153, 349, 386
MBeany GlassFish, 154
mechanizm
CMS, 124, 284
doczania JSP, 387
kopiujcy, 96
MTOM, 441
odzyskiwania pamici, 72, 93, 103, 246, 372
przepustowociowy, 269, 285
wykluczania beanów, 481
meneder
bezpieczestwa, 371
transakcji, 359
Meneder Zada, 38
metadane, 107
metadane klas w HotSpot, 80
metoda
addEntry(), 201
area(), 311
checkResult(), 207
close(), 208
DestroyJavaVM, 77
doTest(), 303, 304
expandCapacity(), 224
FileOutputStream.write(), 208
flush(), 208
HashMap.get(), 215, 220
init, 386
invoke(), 444
JNI_CreateJavaVM, 76
jspInit(), 387
pass-by-reference, 471, 478
pass-by-value, 470
Random.next(), 217, 218
reset(), 207
service, 369
Poleć książkę
516
Wydajno Javy
metoda
stop-the-world, 151
SynchronizedMap.get(), 215
System.currentTimeMillis(), 301
System.gc(), 129, 280, 372
System.nanoTime(), 301
write(), 207
ródowa, root method, 160
metody
interceptora
poziom domylny, 479
poziom klasy, 480
poziom metody, 480
kompilacji, 83
natywne, 90
poszukiwacza, 460
statystyczne, 318, 323
metryka, 180
sortowania, 180
System CPU, 175
User CPU, 175
User Lock, 175
metryki
pamici, 136
przypisane, 175
wydajnoci, 333
mierzenie czasu, 302
migracja wtku, thread migration, 51, 59
mikrobenchmark, 297, 307, 315
minimalizator pliku, 389
mode pokolenie, 93, 95
model
DOM, 412
interakcji z uytkownikiem, 330
pamici Java, 221
persystencji, 472
wtkowania, 86
wdroenia
pojedynczej instancji JVM, 243
wielu instancji JVM, 243
modyfikacja programu, 221
Monitor
Javy, 84
Systemu, 41
Systemu GNOME, 41, 42
wydajnoci, 37, 39
monitoring zdalny, remote monitoring, 134
monitorowanie
aktywnoci kompilacji JIT, 150
aktywnoci adowania klas, 152
aplikacji Java, 153
danych aplikacji, 386
JVM, 117
Kup książkę
kolejki, 49, 50, 51
kontenera EJB, 462
adowania klas, 152
migracji wtków, 59
mimowolnego przeczania kontekstu, 58
podsystemów, 352
progu zatrudnienia, 272
puli pocze, 361
rywalizacji o blokady, 55, 154
serwera aplikacji, 347
we/wy sieci, 60
wydajnoci, performance monitoring, 36, 118, 157
wykorzystania CPU, 40
wykorzystania pamici, 52
zasobów, 345
zdalnych aplikacji, 138, 140
monitory Java/blokady, 213
MTOM, Message Transmission Optimization
Mechanism, 436, 441
N
narzdzia graficzne, 132
narzdzie
Btrace, 357
collect, 159
Collector, 362
corestat, 68
cpubar, 42
cpustat, 66
cputrack, 66
er_print, 160, 166, 178–183, 362
GCHisto, 129
iobar, 64
iostat, 63
JConsole, 150, 132–134, 349
JMeter, 330
jstatd daemon, 139
kstat, 66
mpstat, 45, 214
netstat, 59
prstat, 46
sar, 66
Test TCP, 354
top, 46
typeperf, 50
VisualVM, 137, 140, 144, 150
vmstat, 45
nasuchiwacz HTTP, 373
nasuchiwacze, listeners, 369
nasuchiwacze kontekstu, 387
nazwy metryk, 179
nieudana promocja, promotion failure, 97
Poleć książkę
Skorowidz
niewydolno trybu równoczesnego, 126
nowa warto, 219
NRU, not recently used, 462
NTP, Network Time Protocol, 346
NUMA, 291
O
obcienie, overhead, 159
obiekt SchemaFactory, 414
obliczanie
odchylenia standardowego, 319
rozmiarów, 258
redniej, 318
obsuga
alokacji obiektów, 254
bdów, 383
bdów krytycznych VM, 91
dynamicznych modyfikacji, 369
wyjtków, 84
zaczników, 439
obszar wymiany, swap space, 51
odchylenie standardowe, 319, 321
odtwarzanie logów dostpu, 366
odwoanie blokady przeciganej, 88
odzyskiwanie pamici, 52, 88, 96, 129, 160, 246,
254, 266, 286, 300
CMS, 277
czstotliwo procesów, 259
dla staego pokolenia, 151
dziennik, 257
HotSpot VM, 93
mark-compact, 98
mechanizm
pokoleniowy, 93
przewanie-równoczesny, 99
równoczesny, 122
równolegy, 99
starego pokolenia, 104
szeregowy, 98
Train GC, 103
mniejsze, 119, 265
monitorowanie, 353
monitorowanie procesów, 129
najpierw-kosz, 102
najpierw-mieci, 102
pene, 119, 122, 265
raportowanie danych, 119
rozproszone, 372
równoczesne, 281
statystyki procesu, 119
stop-the-world, 98
szybka alokacja, 97
Kup książkę
517
typu stop-the-world, 270
ustawienia HotSpot VM, 111
VisualGC, 145
okno
Attach Wizard, 188
Filter Data, 178
interfejsu Analyzer, 167
adowania próbki, 167
Manual Integration, 190
MBeans, 153
Monitor, 141
Overview, 140
Profiling Results, 198
Sampler, 143
Set Data Presentation, 205
Threads, 143
VisualGC, 146
okres rozgrzewki, 298, 305, 307
oopsy, 73
opcja -Xloggc, 127
opcje
komendy collect, 163
wiersza polece, 74, 252, 292
wiersza polece HotSpot VM, 248–250, 493–510
operacje
CAS, 219
punktów bezpieczestwa, 250
we/wy dysku, 359
we/wy sieci, 354, 361
wielowtkowe, 233
opó
nienie, latency, 237, 259, 354
optymalizacja, 105, 225, 292, 302
agresywna, 315
blokowania, 55
CHA, 107
optymalizacje wysokiego poziomu, 110
P
paginacja, 483
pakiet
Apache XML Commons Resolver, 415
NetBeas IDE, 187
sysstat, 59
zdalnego profilowania, 190
pami, 51
pami podrczna, caching, 396
beanów, 459
drugiego poziomu, 453
gotowa, 461
kodu, 136
L2, 464
mikka, 455
Poleć książkę
518
Wydajno Javy
pami podrczna, caching
sesji JPA, 454
transakcyjna, 461
twarda, 455
wyników, 454
wyników zapyta, 484
panel
Analyze Memory, 197
Applications, 138
Graphs, 148
Histogram, 149
kontrolny
sekcja Basic Telemetry, 194
sekcja Controls, 193
sekcja Profiling Results, 194
sekcja Status, 193
sekcja View, 194
programu profilujcego, 192
Spaces, 147
parser
SAX, 419
StAX, 410, 421
Woodstox, 410
parsery strumieniowe, 412, 423
parsowanie dokumentu, 409
partycjonowanie da, 458
pene odzyskiwanie pamici, 97
percentyl, 335
ptla
gówna, 110
instrukcji przecznika, 83
koczca, 110
wstpna, 110
planista krótkoterminowy
w Linux, 51
w Solaris, 50
w Windows, 49
planista procesora, 48
plik
default-web.xml, 389
dziennika, 118
ikony, 379
jar, 81
orm.xml, 484
persistence.xml, 454, 487
sun-cmp-mappings.xml, 473
sun-ejb-jar.xml, 462, 471
web.xml, 380
pywajce mieci, floating garbage, 101
pobieranie
gorliwe, 473
wstpne, prefetching, 473
podgld strony, 333
Kup książkę
podczanie
JConsole, 349
VisualVM, 350
podprzestrzenie, subspaces, 82
podzia iteracji, iteration splitting, 109
POJO, Plain Old Java Object, 452
pola statyczne, static fields, 78
polecenie, Patrz komenda
polityka
bezpieczestwa, security policy, 371
wysiedlania, eviction policy, 462
poczenie JMX, 349
ponowne zaznaczanie, remark, 100
poprawa wydajnoci, 203, 206, 211
porównanie czasów, 312
POX, Plain Old XML, 446
poziomy izolacji transakcji, 465
prawdopodobiestwo wystpienia bdu, 322
prawo Little’a, 339
prezentacja danych, 174
prdko sieci, network speed, 354
proces profilowania, 143
proces rozwoju oprogramowania, 26, 27
procesory
SPARC, 32, 67
wirtualne, 41
procesy odzyskiwania pamici, 129, 266, 286
profil, profile, 159
profilowanie, 143
aplikacji enterprise, 362
metod, 161, 186, 188
pamici, memory profiling, 157, 185, 197
sterty, heap profiling, 157
wydajnoci, performance profiling, 36, 118, 157
wydajnoci CPU, 185
z niskim obcieniem, 185
program, Patrz take aplikacja
obsugi, handlers, 434
obsugi danych, 439
obsugi JAX-WS, 427
profilujcy, profiler, 158
rozwizujcy encje, 415
rozwizujcy katalog, 416
projektowanie
eksperymentów, 317
testu, 338
promowanie, promotion, 248
proste transformacje tosamoci, 104
protokó SSL, 134
próba, experiment, 159
próg zatrudnienia, tenuring threshold, 125, 269–275
przebieg
aplikacji, 298
benchmarku, 335
Poleć książkę
Skorowidz
przechwycenie profilu, 165, 223
przedwczesna promocja, premature promotion, 96
przedzia ufnoci, 319–322
przekierowanie, 378
przeczanie kontekstu, context switching, 51
dobrowolne, 55
mimowolne, 55, 58
przepenienie przestrzeni ocalaych, 270
przeploty, 84
przepyw
pracy, 238
sterowania, 106
przepustowo, throughput, 237, 241, 335, 354, 427
przepustowo sieci, network bandwidth, 59
przestój, stall, 37
przestrzenie nazw, 135
przestrze
eden, 248
modego pokolenia, 248, 289
ocalaych, 135, 147, 248, 269
staego pokolenia, 80, 151, 248
starego pokolenia, 135, 148, 248
przesuwanie wska
nika, 97
przetwarzanie
binarnego bloku danych, 436
dokumentów, 412
dokumentów czciowe, 417
dokumentu XML, 409
strumieniowe, 368
zaczników, 439
da, 377, 404
pule
beanów, 459
obiektów Unmarshaller, 411
wtków, 457
zasobów, 361
punkt kocowy EJB, 433
punkty bezpieczestwa, safepoints, 80, 88
punkty bezpieczestwa VM, 88
Q
QL, Query Language, 475
R
raportowanie metryki, 183
redukcja
czasu uruchamiania, 82
interakcji dysku, 65
interwau próbkowania, 189
przestojów CPU, 68
uycia CPU, 62
refaktoryzacja, 230–232
Kup książkę
519
referencje do interfejsu lokalnego, 470
regulacja
adaptacyjna, 111
czasu przestojów CMS, 282
JVM, 237, 240, 260, 371
keep-alive, 377
kolejki pocze, 376
kontenera EJB, 456
liczby wtków, 290
maszyny wirtualnej, 353
mechanizmu CMS, 277
opó
nie, 259, 267
pamici podrcznej, 462
przepustowoci, 283
przepustowoci dla CMS, 284
przepustowociowego mechanizmu, 285
puli zasobów, 361
puli wtków, 374, 458
rozmiaru przestrzeni ocalaych, 287
wydajnoci, performance tuning, 36, 118, 157
wydajnoci kontenera webowego, 369
rejestrowanie zdarze dostpu, 402
replikacja pamici wewntrznej, 400
reprezentacja porednia, 104, 108
rezultaty biece, 198
rozgrzewka, 298, 307
rozkad t, 320
rozkadanie obcienia, 283
rozlanie rejestru, register spilling, 73
rozlewanie wartoci, 105
rozmiar
bazy danych, 338
bloku danych, 429
edenu, 275
HashMap, 228
klas, 223
pamici podrcznej, 456, 464
próbki, 319, 323
przestrzeni
modego pokolenia, 115, 258
ocalaych, 270, 274, 287, 288
staego pokolenia, 151, 258
starego pokolenia, 263
puli, 361, 463
pocze, 487
wtków, 373
sterty, 115, 254, 257
sterty Java, 265
stron pamici, 295
struktur danych, 222
wiadomoci, 428
zacznika, 439
ywych danych, 256
Poleć książkę
520
Wydajno Javy
rozwizywanie katalogu, 415
rozwijanie, unrolling, 104
równoczesny reset, concurrent reset, 125
rurocig, 367
rywalizacja o blokady, 212
w Linux, 57
w Solaris, 55
w Windows, 57
rzadkie puapki, 107
S
serializacja, 397, 413
serializacja kontroli, 467
serializator
Fast Infoset, 447
Jackson, 399
serwer
aplikacji, 347, 362
GlassFish, 347, 368, 394, 458
HTTP, 401
StreamingDataHandler, 440
WWW, 362
sesja EclipseLink, 464
sesja profilowania pamici, 196
sie, 354
silnik, engine, 367
silnik serwletu, 369
skalowalno, 59
skalowanie benchmarku, 337
skanowanie liniowe rejestru, 105
skryplety, 393
skrypt iosnoop.d, 64
skrypty powoki, 362
sabe referencje, 455
sowo cechujce, mark word, 85
sowo kluczowe
transient, 400
volatile, 221
SMP, symmetric multiprocessing, 343
SOA, Service Oriented Architecture, 407
Solaris cpubar, 44
spadek wydajnoci, 73, 314
specyfikacja
EJB, 451
Fast Infoset, 447
Java Persistence, 490
JAX-WS, 423
jzyka Java, 78
JPA, 453, 482
SOAP, 446
SSA, static single assignment, 104, 108
staa czasowa, constant time, 85
stae pokolenie, 94
Kup książkę
stany wtku, 87
stara warto, 219
stare pokolenie, 93
statyczne inicjalizatory klas, 78
statystyki
blokad, 214
odzyskiwania pamici, 127
przestojów, 130
serwera aplikacji, 350
wydajnoci, 38, 380
sterownik
HTTP, 427
testowy, 338
sterta, heap, 89, 160, 252
stos
JAX-WS RI, 424
wywoa, 173
strategia alokacji rejestru, 105
stronicowanie, paging, 42, 51
strony pamici, 294
struktury HashMap, 227
supersowo, superword, 110
SUT, system under test, 328, 426
symulacja opó
nie, 332
synchronizacja, 84
system
Solaris, 42
testowy SUT, 328
zewntrzny, 356
szablon, template, 82
szeroko pasma, bandwidth, 354
szybko skanowania pamici, 42
cieka
klasy, 79
wykonania, 107, 201
lady stosu, 92, 155
ledzenie
stosu, stack trace, 48
dania, 404
redni czas odpowiedzi, 335
rednia, 318
rodowisko Java Runtime, 81
rodowisko uruchomieniowe JVM, 244
T
tablica kart, card table, 94
tablice, arrays, 82
tablice bazy danych, 490
technologia Fast Infoset, 447
Poleć książkę
Skorowidz
test
obcienia, load test, 166
t-Studenta, 321
testowanie, 240
testy
porównawcze, 297, 325, 347, 366
porównawcze usug internetowych, 425
wydajnoci, 216
TLAB, Thread-Local Allocation Buffers, 97
transakcja
kupuj, 336
uytkownika, 333
wyszukiwanie, 336
transakcje zarzdzane przez
beany, 466
kontener, 466
trwao sesji, 400
tryb
deweloperski, 370
eksperta, 176
maszyny, 176
podczania, 188
produkcyjny, 370
stop-the-world, 267
uytkownika, 176
tryby prezentacji danych, 176
tworzenie
benchmarku, 331, 332
instancji Factory, 410
klienta proxy, 449
klienta usugi internetowej, 426
mikrobenchmarków, 329
parsera, 411
puli pocze, 486
wtku, 86
typ
pamici podrcznej, 456
pobierania
FetchType, 485
EAGER, 485
LAZY, 485
typy schematów XML, 432
U
udostpnianie danych klas, 79, 81
ufno, 322
ujemny rozkad wykadniczy, 332
ukad sterty, 252
uniewanienie pamici podrcznej, 484
unmarshaller JAXB, 412
urzdzenia wejcia/wyjcia, 37
Kup książkę
521
usugi
HTTP, 373
internetowe, 407, 425, 427
usunicie poza ptl, 105
usuwanie
biaych znaków, 388
martwego kodu, 302
sprawdzania zakresów, 110
uycie pamici, memory footprint, 242
V
VisualGC GUI, 145
W
wtek, 85
Blocked thread, 87
New thread, 87
Thread in Java, 87
Thread in vm, 87
wtki
natywne, 86
wewntrzne VM, 87
wdroenie JVM, 243
wejcie w monitor, 84
wersje JVM, 245
weryfikacja, validation, 338, 413
kodu bajtowego, 80
typu, type veryfication, 81
wnioskowanie typu, type inference, 81
wplatanie, 307, 310
WSDL, Web Services Description Language, 407, 430
wska
niki obiektów, 80
skompresowane, 73
typowe, 73
wspólne archiwum, 81
wspóczynnik
NewRatio, 372
promowania obiektów, 266
przybywania, 342
równolegoci, 230
wstrzykiwania, 332
wstawianie treci, 104
wtyczka
VisualGC, 145
VisualVM-MBeans, 153
wybór interfejsu API, 420
wyciek pamici, memory leak, 160, 201
wydajno, 203, 246, 314, 333
aplikacji, 325, 379
aplikacji internetowych, 365
buforowania, 469
Poleć książkę
522
Wydajno Javy
wydajno
czciowego przetwarzania, 443
DOM i JAXB, 422
EJB QL, 477
interfejsów Provider, 446
Java Persistence, 451
JAX-WS, 445
klienta usugi internetowej, 449
metod, 307, 310
numerycznych typów schematów, 431
parserów strumieniowych, 421
parsowania, 414
penego przetwarzania, 443
pobierania, 474
procesu serializacji, 422
programu, 224, 434
punktów kocowych, 434
schematów, 432
serializatorów, 399
sieci, 354
skrypletu, 393
systemów zewntrznych, 356
systemu, 33
usug internetowych, 407, 428
we/wy sieci, 59
XML, 408
wyjtki, exceptions, 84
wyjcie z monitora, 84
wykorzystanie blokad, 175
wykorzystanie
CPU, 175, 205, 232, 336
przez system, 160
przez uytkownika, 160
pamici
w Linux, 54
w Solaris, 53
w Windows, 52
sieci, 62
we/wy dysku, 63
we/wy sieci, 60
zaczników, 443
wykres
Compile Time, 150
programowo zaleny, 108
wykrywanie wycieków pamici, 185
wymagania systemowe, 238, 241
wymiana stron, swapping, 51
wycigi, races, 84
wywietlanie
danych, 213
metod, 183
wywoujcy-wywoywany, Caller-Callee, 160
Kup książkę
wywoywanie procesów, 281
wzajemne wykluczenie, mutual exclusion, 84
wzrost wydajnoci, 220
X
XOP, XML-binary Optimized Packaging, 436
Z
zaczepy, hooks, 451
zakleszczenie wtków, thread deadlocks, 92
zakadka
Callers-Callees, 209, 215, 217
GC Timeline, 131
Memory, 135
Timeline, 233
Zasoby, 41
zaczanie dokumentu XML, 441
zaczniki, 443
zamiana skalara, 293
zapenianie
przestrzeni ocalaych, 276
HashMap, 228
zapytania
dynamiczne, 482
jzyka zapyta JPA, 482
JPA QL, 483
natywne, 482
nazwane, 482
zarzdzalno, manageability, 241
zarzdzanie
baz danych, 400
powtarzalnoci, 345
wtkami, 85
zatrudnianie, tenuring, 248, 271
zawijanie, wrapping, 207
zbieranie danych profilu, 166
zdalne profilowanie, 144, 187
zdalny
host, 140, 190
monitoring, 142
system, 138
zdarzenia dostpu, 402
ziarnisto usugi, 429
zmiana rozmiaru, 224, 227
HashMap, 228
klas, 223, 226
StringBuilder, 229
zmienno, 323
czasu odpowiedzi, 341
przepustowoci, 341
wykorzystania CPU, 341
Poleć książkę
Skorowidz
znacznik daty i czasu, 126
znak inicjujcy, initial mark, 100
zrzuty
ekranu rezultatów, 196, 200
sterty, 145, 201
stosu wtku, 88
wtków, threads dumps, 353
zsynchronizowane bloki, 84
zuycie pamici, memory footprint, 237, 251
zwijanie staych, 104
Kup książkę
523
dania HTTP, 404
danie, request, 333
Poleć książkę
524
Wydajno Javy
Kup książkę
Poleć książkę
Download