Jak widać poniżej, pośród wszystkiego działającego zgodnie z oczekiwaniami, operacja GC zatrzymująca świat trwała +60 sekund. Można by się zdecydować na zatrzymanie świata przez cały czas, ponieważ spadli klienci (z terakoty), narzekając (serwer z terakoty) nie zareagował w tym czasie.JVM minuta długa GC
Czy to młody/nieletni GC? Jeśli tak, to czy może z powodu głodu w młodym pokoleniu (eden + ocaleni?).
Czy tylko 109333 (KB) zostanie zwolnione?
Zacznę tworzyć wykresy różnych pojemników z pamięcią, inne sugestie, co można zrobić, aby dalej diagnozować takie problemy?
date, startMem=24589884, endMem=24478495, reclaimed=111389, timeTaken=0.211244 (1172274.139: [GC 24589884K->24478495K(29343104K), 0.2112440 secs])
date, startMem=24614815, endMem=24505482, reclaimed=109333, timeTaken=61.301987 (1172276.518: [GC 24614815K->24505482K(29343104K), 61.3019860 secs])
date, startMem=24641802, endMem=24529546, reclaimed=112256, timeTaken=2.68437 (1172348.921: [GC 24641802K->24529546K(29343104K), 2.6843700 secs])
Sun JVM 1,6, stosując następującą konfiguracji:
-Xms28672m -Xmx28672m -xx: + UseConcMarkSweepGC -XX: + PrintGCTimeStamps -XX: + PrintGC
Sane Ustawienia konfiguracji do dalszego debugowania GC:
'-XX:+PrintGCDateStamps' Print date stamps instead of relative timestamps
'-XX:+PrintGCDetails' Will show what cpu went for (user, kern), gc algorithm used
'-XX:+PrintHeapAtGC' will show all of the heaps memory containers and their usage
'-Xloggc:/path/to/dedicated.log' log to specific file
Co robi Twoja aplikacja? Jitter GC występuje wtedy, gdy duże ilości pamięci są odzyskiwane ze sterty podczas wielokrotnego przeciągania, prawdopodobnie każde przeciągnięcie powoduje, że więcej obiektów kwalifikuje się do zbierania, co prowadzi do dalszych przemiatnięć. Nawet 2-sekundowy przebieg, który pokazujesz, to ogromna ilość czasu, który GC musi wykonać. Myślę, że zmienisz sposób, w jaki aplikacja obsługuje obiekty, a nie konfiguracja JVM będzie ścieżką, którą musisz wykonać. Każda aplikacja, która musi utrzymać GC jitter w dół powinna szukać raczej ponownego użycia niż ponownego przydzielania obiektów. – codeghost
To jest magazyn sesji (cookie). Liczby, na przykład "odzyskane", wskazują, że niewiele pamięci zostało odzyskanych. Jeśli tak, dobrze jest wiedzieć, dlaczego. Całkowicie się z Tobą zgadzam, że musi być rozwiązany, w jaki sposób obsługiwane są (sesyjne) obiekty, co zawierają itp. Jest lepszy proces obsługi sesji, ale na razie mam zadanie, aby dowiedzieć się, dlaczego GC zajęłoby +60 sekund i nadal nie ma wolnej pamięci więcej niż poprzednie 0.2s gc. – user135361
Spójrz na ten blog http://kirk.blog-city.com/why_do_i_have_this_long_gc_pause.htm może dać ci kilka wskazówek. – codeghost