39
POSLOVNE WEB APLIKACIJE 12.05.2015. Matija Tomaškovid | Evolva, CEO Što kad se (s)ruši ili stane Java aplikacija?

JavaCro'15 - Java application crashed, now what - Matija Tomašković

Embed Size (px)

Citation preview

Page 1: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE 12.05.2015.

Matija Tomaškovid | Evolva, CEO

Što kad se (s)ruši ili stane Java aplikacija?

Page 2: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 3: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 4: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 5: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 6: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 6 | 12.05.2015.

JVM crash - analiza

Page 7: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 8: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 9: JavaCro'15 - Java application crashed, now what - Matija Tomašković

DEMO: JVM crash – native code

Page 10: JavaCro'15 - Java application crashed, now what - Matija Tomašković
Page 11: JavaCro'15 - Java application crashed, now what - Matija Tomašković
Page 12: JavaCro'15 - Java application crashed, now what - Matija Tomašković
Page 13: JavaCro'15 - Java application crashed, now what - Matija Tomašković
Page 14: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 14 | 12.05.2015.

Analiza memorije

Page 15: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 16: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 17: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 18: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 19: JavaCro'15 - Java application crashed, now what - Matija Tomašković
Page 20: JavaCro'15 - Java application crashed, now what - Matija Tomašković

DEMO: Eclipse MAT, IBM Heap Analyser,

Visual VM (runtime)

Page 21: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 21 | 12.05.2015.

Analiza threadova

Page 22: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 23: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 24: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 25: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 26: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 26 | 12.05.2015.

Logging Orphan requests Log extractor

Page 27: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 28: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 29: JavaCro'15 - Java application crashed, now what - Matija Tomašković

DEMO: Orphan log analyser

Page 30: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 31: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 31 | 12.05.2015.

Pradenje konekcija na bazi

Page 32: JavaCro'15 - Java application crashed, now what - Matija Tomašković

ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 32 | 12.05.2015.

Dekoracija konekcija

Page 33: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 33 | 12.05.2015.

Prevencija: što raditi da Java aplikacija radi bez zastoja

Page 34: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 35: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 36: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 37: JavaCro'15 - Java application crashed, now what - Matija Tomašković

POSLOVNE WEB APLIKACIJE | [email protected] | www.evolva.hr 37 | 12.05.2015.

Zaključak

Page 38: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Š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

Page 39: JavaCro'15 - Java application crashed, now what - Matija Tomašković

Hvala na pažnji

www.evolva.hr

[email protected]

POSLOVNE WEB APLIKACIJE