Workshops

Java Runtime Optimization Workshop

Na nedavno održanoj radionici o optimizaciji Java okruženja, naš Mihael Marić govorio je o podešavanju Java Virtual Machine i demonstrirao korištenje Java Options za poboljšanje performansi.

Što su JVM i Java Options?

Java Virtual Machine (JVM) je virtualni stroj koji omogućava izvršavanje Java programa, kao i drugih jezika kompajliranih u Java bajt kod. Ključna je komponenta sustava, jer upravlja memorijom aplikacija i osigurava prenosivo izvršno okruženje.

Java Options su parametri koji kontroliraju ponašanje JVM-a. Programeri ih koriste za fino podešavanje performansi, upravljanje memorijom i za optimizaciju garbage collectora (GC) kako bi aplikacije radile učinkovitije.

Opcije upravljanja memorijom

Heap je memorijsko područje rezervirano za objekte i instance klasa. Pravilno upravljanje heap memorijom ključno je za sprječavanje grešaka poput OutOfMemoryError.

Garbage Collector (GC) automatski oslobađa memoriju uklanjanjem objekata koji više nisu u upotrebi. Optimizacija GC-a smanjuje vrijeme pauze i povećava responzivnost aplikacije.

Primjer podešavanja memorije:

java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:G1HeapRegionSize=16M -jar myapp.jar
  • -XX:+UseG1GC omogućuje G1 garbage collector, koji je prikladan za aplikacije s velikim heapovima i gdje su važna mala vremena pauze.
  • -XX:MaxGCPauseMillis=200 postavlja cilj za maksimalno vrijeme pauze GC-a na 200 milisekundi, s ciljem dosljednog vremena odgovora.
  • -XX:ParalleGCThreads=8 određuje broj threadova koje će GC koristiti za paralelne operacije, a koje treba podesiti na temelju broja jezgri u sustavu.
  • -XX:G1HeapRegionSize=16M postavlja veličinu regija u heapu koju koristi G1 GC na 16 MB, što utječe na učinkovitost GC-a.

CPU konfiguracija

Optimiziranje CPU-a za aplikacije ključno je za osiguranje učinkovite upotrebe resursa za obradu, optimizaciju performansi i smanjenje kašnjenja. Ispravno konfigurirane CPU postavke mogu pomoći u upravljanju i ravnoteži radnog opterećenja, što dovodi do bolje propusnosti i odziva. Ovo je osobito važno u okruženjima s više procesora ili jezgri, gdje fino podešavanje može spriječiti probleme poput sukoba CPU-a, neučinkovitog skupljanja smeća i upravljanja threadovima koji nisu optimizirani.

Opcije u drugim okruženjima

Možete postaviti kao varijable okruženja u Dockerfileu.

Dockerfile using java options

U Spring Bootu možmo koristiti opcije izravno unutar datoteke application.properties. Na taj način vrlo jednostavno konfiguramo JVM, bez pribjegavanja zasebnim argumentima u naredbenom retku. Postavke memorije, postavke GC-a, opcije threadova i još mnogo toga možemo specificirati upravo na ovaj način. Takav pristup pojednostavljuje upravljanje, posebno u kontejnerskim okruženjima ili u Cloudu, osiguravajući dosljedno ponašanje u svim implementacijama i čineći održavanje aplikacije puno jednostavnijim zadatkom.

spring.main.initial-memory-size=256M
spring.main.max-memory-size=1G

spring.main.gc-type=parallel
spring.main.max-gc-pause-millis=200
spring.main.parallel-gc-threads=4
spring.main.concurrent-gc-threads=2

spring.main.ci-compiler-count=2
spring.main.active-processor-count=4
spring.main.compile-threshold=5000

Cijelu dokumentaciju o optimiziranju JVM-a možete pronaći na službenoj stranici.

Autor

Mihael Marić

Ova stranica koristi kolačiće da bi poboljšalo korisničko iskustvo, više o tome možete saznajte na našoj stranici "politika privatnosti"

Politika privatnosti