středa 30. dubna 2014

Velikost Java heapu

Pokud je na serveru nastavena velká velikost heapu, např. 8GB, je dobré popřemýšlet nad jeho nastavením. Pokud totiž použijeme doporučované nastavení ms=mx, nebude tato oblast paměti poté, co JVM zaplní heap, použitelná pro jiné aplikace.

Pokud použijeme konfiguraci, kde se ms != mx, vstupuje do hry faktor reserved vs commited heap. Nastavíme-li např. ms=1G a mx=8G, pak bude oněch 8G pouze rezervováno (virtuální paměti) a alokován bude pouze 1GB (fyzické paměti). JVM pak bude při provádění GC provádět změny v alokaci fyzické paměti, může např. provést resizing heapu z 1GB na 2GB a alokovat tak další 1GB z oné 8GB rezervace. Takž pak bude mít rezervováno 8GB a 2GB komitováno.

Nevýhody spojené s velkým heapem jsou:
  • Nevyužívá optimálně paměť serveru
  • Pokud by měl být vyšší, než je fyzická paměť na serveru, dojde samozřejmě k pagingu a řádovému zpomalení odezev systému

Velikost heapu by měla být nastavena zhruba tak, abychom snížili počet full GC cyklů a jejich pauz, aby server "neškytal" :). Pokud máme k dispozici deterministický GC, můžeme jej naladit tak, aby byla frekvence GC co nejnižší a zároveň pauzy co nejkratší.

Žádné komentáře:

Okomentovat