Czy istnieje poradnik Kucharski na problemy GC?

Prawie każdy w końcu ma problemy z GC z Javą.

Czy istnieje poradnik Kucharski lub półautomatyczne narzędzie do strojenia GC dla Javy?

Moje uzasadnienie jest takie:

  • prawie każdy w końcu ma te problemy
  • istnieje wiele możliwych czynników (powiedzmy 20), z których tylko kilka wpływa na twój problem.
  • Większość ludzi nie wie, jak zidentyfikować kluczowe czynniki, więc GC tuning jest bardziej jak czarna Sztuka niż nauka. Nie każdy używa HotSpot VM. Różne wersje Sun mają różne charakterystyki GC.
  • nie ma motywacji do eksperymentowania(np. uruchamianie maszyny Wirtualnej z nieco innymi ustawieniami każdego dnia, aby zobaczyć, jak się rozegrają).

Więc pytanie naprawdę brzmi: czy jest coś, co mogę użyć w sposób listy kontrolnej? A może nawet narzędzie, które analizuje dzienniki GC lub zrzuty sterty i daje mi konkretne wskazówki, gdzie szukać (zamiast mówić mi " 95% danych jest alokowanych w obiektach typu byte []", co jest w zasadzie bezużyteczne).

Podobne pytania:

Author: Community, 2011-07-29

2 answers

Referencje dla różnych informacji GC:

Oracle

Tuning Garbage Collection with the 5.0 Java [TM] Virtual Machine

I to też

Java SE 6 HotSpot [TM] Virtual Machine Garbage Collection Tuning

IBM

Fine Tuning Garbage Collection [link dead]

Extensible Verbose Toolkit

SAP JVM

Zarządzanie Pamięcią (Śmieci Kolekcja)

Wykrywanie Wycieków Pamięci

Wykrywanie Wiszących / Zapętlających Maszyn Wirtualnych

Analiza sytuacji poza pamięcią

Przepraszam, że nie wiem zbyt wiele o SAP, ale dostarczyłem kilka rzeczy, które znalazłem.

Jeśli chodzi o książkę kucharską, tuning jest najprawdopodobniej specyficzny dla aplikacji na tym poziomie, ale jest to ciekawy temat.

Dodatek

Wspomniałeś także o narzędziach analitycznych. Lista kandydatów tutaj:

Znasz jakieś narzędzia do analizy logów Java garbage collection?

 15
Author: Merlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:45:38

Z różnych zasobów mam skompilowane sanity checklist że używam do analizy zachowania GC i wydajności moich aplikacji. te wytyczne są ogólne i mają zastosowanie do każdego dostawcy JVM, ale zawierają również informacje specyficzne dla HotspotVM dla ilustracji.

  1. Wyłącz jawne Gc . Explicit GC jest złą praktyką kodowania, nigdy nie pomaga. Użyj -XX:+DisableExplicitGC.

  2. Włącz pełne logowanie GC . Lekki, ale mocny.

    • Oblicz zestaw danych na żywo, Wskaźnik alokacji i Wskaźnik promocji . To powie Ci, czy potrzebujesz większej sterty lub jeśli twój np. Młody Gen jest zbyt mały, lub jeśli Twoje przestrzenie ocalałych są przepełnione, itp.
    • Oblicz Całkowity czas GC , powinien wynosić
    • Użycie -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
  3. Rozważ dodatkowe sposoby zbierania informacji o GC. Logowanie jest w porządku, ale są czasami dostępne lekkie narzędzia wiersza poleceń, które dadzą ci jeszcze więcej wglądu. Np. jstat do hotspotu, który pokaże Ci okupację / pojemność Edenu, ocalałego i Starego Gen.

  4. Zbieraj histogramy klasy są one bardzo proste i pokażą ci zawartość sterty. Możesz robić migawki, gdy zauważysz jakąś dziwną aktywność GC, lub możesz robić je przed / po pełnym GC: {]}

    • treść przestrzeni OldGen : możesz dowiedzieć się które obiekty zamieszkują OldGen. Musisz wydrukować histogramy przed i po pełnym GC. A ponieważ zbiór YoungGen jest wykonywany przed pełnym GC, te histogramy pokażą zawartość starej generacji. Use -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC.
    • wykrywanie przedwcześnie promowanych obiektów : aby określić, czy jakiekolwiek instancje są promowane wcześnie, musisz przestudiować histogramy, aby zobaczyć, które klasy powinny znajdować się w oldgen i które klasy powinny być widoczne tylko w YoungGen. To nie można tego zrobić automatycznie, musisz uzasadnić cel każdej klasy i jej instancję, aby określić, czy obiekt jest tymczasowy, czy nie.
  5. Rozważmy inny algorytm GC . Maszyny wirtualne są zazwyczaj wyposażone w kilka różnych implementacji GC, które zapewniają różne kompromisy : przepustowość, footprint, bez pauzy/krótkie przerwy, w czasie rzeczywistym itp. Rozważ dostępne opcje i wybierz tę, która odpowiada twoim potrzebom.

  6. Uwaga na finalize () . Sprawdź, czy GC nadąża za klasami używając finalize(). Wykonanie tej metody może być dość kosztowne, co może mieć wpływ na przepustowość GC i aplikacji.

  7. Wysypiska Śmieci.{[7] } jest to pierwszy krok, który jest ciężki i będzie miał wpływ na uruchomioną aplikację. Zbierz zrzut sterty, aby dalej badać zawartość sterty lub potwierdzić hipotezę zaobserwowaną w kroku 4.

Zasoby używany:

Książki:

Rozmowy/Artykuły:

Mailing Listy:

 20
Author: Ales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-13 20:10:42