Upload
hujak-hrvatska-udruga-java-korisnika-croatian-java-user-association
View
330
Download
2
Embed Size (px)
Citation preview
POSLOVNE WEB APLIKACIJE 12.05.2015.
Matija Tomaškovid | Evolva, CEO
Što kad se (s)ruši ili stane Java aplikacija?
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 2 | 12.05.2015.
Java web aplikacije u enterprise okruženju
Baza
Java web aplikacija
› enterprise okruženje - veliki broj korisnika › rušenje/zastoj aplikacije – mogude ozbiljne posljedice
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 3 | 12.05.2015.
Najčešći razlozi pada Java web aplikacija
› Pad radi greške na nivou pojedine akcije » česti uzrok: nedostatak granica
› Pad radi prevelikog opterećenja
› Pad radi dugoročne anomalije
» prevencija: short term scenariji / unit testovi
» prevencija: peak test
» prevencija : long-term testovi
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 4 | 12.05.2015.
Najčešći razlozi pada Java web aplikacija
› Pad radi greške na nivou pojedine akcije » česti uzrok: nedostatak granica
› Pad radi prevelikog opterećenja
› Pad radi dugoročne anomalije
» prevencija: short term scenariji / unit testovi
» prevencija: peak test
» prevencija : long-term testovi
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 5 | 12.05.2015.
Klasifikacija pada sustava: rušenje ili zastoj?
RUŠENJE › JVM crash
ZASTOJI › Zauzede resursa
» Memorija » Thread pool » Disk » Baza: connection pools, statements, ...
› Loša sinhronizacija threadova » puno blocked threadova » thread deadlock
› Mrtva petlja
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 6 | 12.05.2015.
JVM crash - analiza
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 7 | 12.05.2015.
Situacija: JVM crash
› hs_err_pid*.log datoteku kreira JVM kod rušenja › na vrhu je razlog
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 8 | 12.05.2015.
Situacija: JVM crash
Gdje je file? › datoteka je locirana gdje je pokrenut JVM proces › ako je u pitanju bio Windows servis, onda može završiti u
C:\Windows\System32 (za 32bit) › Java 6+:
› -XX:ErrorFile=./hs_err_pid<pid>.log
Uzrok? › ako koristite native kod – vrlo vjerojatno poziv vanjske native funkcije › ako ne koristite – onda JVM bug – prijaviti grešku i uzeti novi JDK
DEMO: JVM crash – native code
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 14 | 12.05.2015.
Analiza memorije
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 15 | 12.05.2015.
Struktura memorije JVM-a
JVM
Heap memory: Java objects -Xmx=256m
Non-heap:
Tenured generation Young generation
Eden Survivor 1
Survivor 2
java.lang.OutOfMemoryError: Java heap space
Stack memory: per thread (local variables, method calls) -Xss512k
Permanent generation (JDK 7) Loaded classes, String pool, ... -XX:MaxPermSize=128m
java.lang.OutOfMemoryError: PermGen space
Code cache: native code Metaspace (JDK 8)
java.lang.StackOverflowError
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 16 | 12.05.2015.
Potrošnja memorije u usporedbi s ostalim
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 17 | 12.05.2015.
Potrošnja memorije u usporedbi s ostalim
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 18 | 12.05.2015.
Heap dump - analiza
› Ručno: › %JAVA_HOME%\bin\jmap -dump:format=b,
file=d:\manual_heap_dump.bin <pid> › Automatski:
› -XX:+HeapDumpOnOutOfMemoryError › -XX:HeapDumpPath=D:\auto_heap_dump.bin
› Oracle JDK
› heapdump file: *.bin, *.hprof › Eclipse Memory Analyzer Toolkit:
› http://www.eclipse.org/mat/
› Visual VM: › http://visualvm.java.net/
› IBM WebSphere › javacore file - *.phd (portable heap dump) › IBM HeapAnalyzer
› https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091
DEMO: Eclipse MAT, IBM Heap Analyser,
Visual VM (runtime)
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 21 | 12.05.2015.
Analiza threadova
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 22 | 12.05.2015.
Praćenje threadova – blokade / dead loop
Blokirani threadovi Dead loop / dead lock
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 23 | 12.05.2015.
Praćenje threadova - vizualno
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 24 | 12.05.2015.
Praćenje threadova - pretraživanje
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 25 | 12.05.2015.
Praćenje threadova - uzorkovanje
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 26 | 12.05.2015.
Logging Orphan requests Log extractor
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 27 | 12.05.2015.
Struktura loga
Main log 10h 11h 12h 12.45h
13h 14h
Requests
Restart
Requests
› main log: › bilježiti requeste:
› u svakoj liniji identifikator requesta
› početak requesta › detalje › kraj requesta
› bilježiti (re)start sustava
› To omogudava pronalazak dugih i problematičnih requesta
Error log
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 28 | 12.05.2015.
Struktura loga
Main log 10h 11h 12h 12.45h
13h 14h
Requests
Restart
Requests
› main log: › bilježiti requeste:
› u svakoj liniji identifikator requesta
› početak requesta › detalje › kraj requesta
› bilježiti (re)start sustava
› To omogudava pronalazak dugih i problematičnih requesta
Error log
DEMO: Orphan log analyser
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 30 | 12.05.2015.
Request logging + log extractor
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 31 | 12.05.2015.
Pradenje konekcija na bazi
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 32 | 12.05.2015.
Dekoracija konekcija
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 33 | 12.05.2015.
Prevencija: što raditi da Java aplikacija radi bez zastoja
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 34 | 12.05.2015.
Dobro planirati arhitekturu
Database
⁞ Server 1
⁞ Cluster
Load balancer
JVM 2
⁞ Server 2
JVM 3
JVM 4
JVM 1
⁞ Korisnici
Reporting JVM 2
Reporting JVM 1
Database
Poželjan WatchDog
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 35 | 12.05.2015.
Segregacija upita/servisa
Database
JVM
⁞ Brzi upiti
Logika za
odlučivanje
Brza akcija
⁞ Spori upiti
Spori upit
Spori izvještaj
Brza validacija
DB pool brzi
DB pool spori
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 36 | 12.05.2015.
Pratiti performanse sustava
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 37 | 12.05.2015.
Zaključak
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 38 | 12.05.2015.
Preporuka: sveobuhvatni report o ispadu
› Pokušati izbjeći › Biti spreman › Generalno
» kronologija rada / trenutak ispada » ... informacije o okolini koje se ne vide (lako) u logu
› PAD / ZASTOJ » hs error report (u slučaju JVM crash) » heap dump » thread dump
» thread dump uzorci koji su prethodili zastoju » request log
» orphan analysis