Pomoc w tuningu JVM

0

Cześć
Bawie się trochę JVM i chciałbym osiągnąć taki rezultat (z g1 garbage collector):
Heap podzielony na Old i Young Generation po 512mb
Young generation podzielony na 3 części eden, 1 część S0 i 1 część S1 (czyli 307,2mb, i S0,S1 po 102,4mb)
Odpalam jvm z takimi parametrami (oczywiśćie bez gwiazdek):

 -XX:+UseG1GC
* -Xms1024m   -Xmx1024m -Xmn512m
**  -XX:SurvivorRatio=3
*** -XX:NewSize=512m -XX:MaxNewSize=512m

i teraz ja to rozumiem tak:

* cały rozmiar heap = 1024 (chyba Xmn jest zbędne bo niżej definiuje NewSize i MaxNewSize)
** powinno dać podzielenie young generation na 3/5 czyli eden ma 3 części, S0 i S1 po 1 czesci
*** rozmiar young generation

I teraz wydaje mi się że powinienem osiągnąć cel, ale nie wynika to z VisualVM. I teraz nie wiem czy źle zapisuje flagi dla JVM czy nie potrafie czytać VisualVM.
Heap ma poprawny rozmiar (drugie zdjęcie), ale na pierwszym zdjęciu przykładowo Eden space jest zapisany Eden Space (1,000G, 528,000M) (czyli 528mb z 1gb?). Czemu w takim razie Old Gen jest zapisany (1,000G, 486,000M) kiedy powinien mieć 512. Już nie mówiąc o Survivor 0 i Survivor 1 zapisane odpowiednio (8,8) i (1,000G, 8)

Dzięki za pomoc

screenshot-20220122205507.png
screenshot-20220122205551.png

6

Przeczytaj najpierw dokumentacje oraz https://www.oracle.com/technical-resources/articles/java/g1gc.html

Avoid explicitly setting young generation size with the -Xmn option or any or other related option such as -XX:NewRatio.
Fixing the size of the young generation overrides the target pause-time goal.

To, co chcesz zrobić działa na przekór algorytmowi, który sam optymalizuje się pod określony limit latency. Takie zabawy może i miały jakiś sens w starszy algorytmach.

2

Rzeczywiście G1 nie do końca chce współpracować z moją konfiguracją. ParallelGC daje już poprawne wyniki.
Dziękuję za pomoc.
screenshot-20220122231025.png

3

Przy G1 nie powinno się ustawiać rozmiarów ręcznie, bo z uwagi na design (wiele małych regionów) G1 może sprawić, że dany kawałek będzie pełnił różne funkcje w zależności od zapotrzebowania. Do tego dochodzi cała machineria związana z balansowaniem rozmiaru young genu w celu zmieszczenia się w ustalone limity czasowe. Jak bardzo chcesz wymusić rozmiar young gen to możesz popróbować z opcjami -XX:G1NewSizePercent i XX:G1MaxNewSizePercent

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.