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ę