Skonfigurowałem Javę do zrzucania informacji o wyrzucaniu elementów bezużytecznych do dzienników ( pełny GC ). Nie jestem pewien, co oznaczają wpisy dotyczące czyszczenia pamięci w dziennikach. Przykładowe wpisy zamieszczono poniżej. Szukałem w Google i nie znalazłem solidnych wyjaśnień.
Mam kilka rozsądnych domysłów, ale szukam odpowiedzi, które zawierają ścisłe definicje tego, co oznaczają liczby we wpisach, poparte wiarygodnymi źródłami. Automatyczne +1 do wszystkich odpowiedzi, które cytują dokumentację słońca. Moje pytania to:
- Do czego odnosi się PSYoungGen? Zakładam, że ma to coś wspólnego z poprzednim (młodszym?) Pokoleniem, ale co dokładnie?
- Jaka jest różnica między drugą trójką liczb a pierwszą?
- Dlaczego nazwa (PSYoungGen) jest określona dla pierwszej trójki liczb, ale nie dla drugiej?
- Co oznacza każda liczba (rozmiar pamięci) w trójce. Na przykład w 109884K-> 14201K (139904K) jest to pamięć przed GC 109884k, a następnie jest zmniejszana do 14201K. Jakie znaczenie ma trzecia liczba? Dlaczego mielibyśmy potrzebować drugiego zestawu liczb?
8109.128: [GC [PSYoungGen: 109884K-> 14201K (139904K)] 691015K-> 595332K (1119040K), 0,0454530 s]
8112.111: [GC [PSYoungGen: 126649K-> 15528K (142336K)] 707780K-> 605892K (1121472K), 0,0934560 s]
8112.802: [GC [PSYoungGen: 130344K-> 3732K (118592K)] 720708K-> 607895K (1097728K), 0,0682690 s]
źródło
Odpowiedzi:
Większość z nich jest wyjaśniona w przewodniku po strojeniu GC (który i tak warto przeczytać).
Nie jestem pewien, dlaczego w twoim jest PSYoungGen; czy zmieniłeś śmieciarkę?
źródło
Przykład powiązanego pełnego GC pokazuje również kolektory używane dla starych i stałych pokoleń:
Na koniec podzielmy jeden wiersz przykładowego wyjścia dziennika:
źródło
Chciałem tylko wspomnieć, że można uzyskać szczegółowy dziennik GC za pomocą pliku
parametr. Następnie zobaczysz wynik PSYoungGen lub PSPermGen, jak w odpowiedzi.
-Xloggc:gc.log
Wydaje się również, że generuje to samo wyjście,-verbose:gc
ale możesz określić plik wyjściowy w pierwszym.Przykładowe użycie:
Aby lepiej zwizualizować dane, możesz wypróbować gcviewer ( nowszą wersję można znaleźć na github ).
Uważaj, aby poprawnie zapisać parametry, zapomniałem "+", a mój JBoss nie uruchomił się bez żadnego komunikatu o błędzie!
źródło
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<some number of files> -XX:GCLogFileSize=<some size> -XX:+PrintTenuringDistribution