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:
- odpowiednie parametry rozruchu Tomcat 5.5, aby dostroić JVM do bardzo dużego zapotrzebowania, dużej aplikacji internetowej? który jest bardzo specyficzny. Moje pytanie jest szersze.
- jakie są najlepsze ustawienia usuwania śmieci po stronie klienta? znowu bardzo wąski zakres
- czy ktoś zna dobry poradnik Jak skonfigurować GC w Javie? tylko HotSpot
- zarządzanie pamięcią JVM & garbage collection książka? jest 80% tam, ale brakuje mi checklist / cookbook / for-dummies podejście.
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]
SAP JVM
Zarządzanie Pamięcią (Śmieci Kolekcja)
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?
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.
Wyłącz jawne Gc . Explicit GC jest złą praktyką kodowania, nigdy nie pomaga. Użyj
-XX:+DisableExplicitGC
.-
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
-
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. -
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.
-
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
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.
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.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:
- Java Performance - praktyczny poradnik
- the Garbage Collection Handbook - theory explained
Rozmowy/Artykuły:
- Java One 2012 Advanced JVM Tuning
- od kodu Javy do sterty Javy
- Java One 2012 G1 Garbage Collector Performance Tuning
- Garbage Collection Tuning Guide
Mailing Listy:
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