SlideShare a Scribd company logo
1 of 39
Download to read offline
POSLOVNE WEB APLIKACIJE12.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 | info@evolva.hr | www.evolva.hr2 | 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 | info@evolva.hr | www.evolva.hr3 | 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 | info@evolva.hr | www.evolva.hr4 | 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 | info@evolva.hr | www.evolva.hr5 | 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 | info@evolva.hr | www.evolva.hr6 | 12.05.2015.
JVM crash - analiza
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr7 | 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 | info@evolva.hr | www.evolva.hr8 | 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:WindowsSystem32 (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 | info@evolva.hr | www.evolva.hr14 | 12.05.2015.
Analiza memorije
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr15 | 12.05.2015.
Struktura memorije JVM-a
JVM
Heap memory: Java objects
-Xmx=256m
Non-heap:
Tenured generationYoung 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 codeMetaspace (JDK 8)
java.lang.StackOverflowError
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr16 | 12.05.2015.
Potrošnja memorije u usporedbi s ostalim
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr17 | 12.05.2015.
Potrošnja memorije u usporedbi s ostalim
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr18 | 12.05.2015.
Heap dump - analiza
› Ručno:
› %JAVA_HOME%binjmap -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/c
ommunityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091
DEMO:
Eclipse MAT, IBM Heap Analyser,
Visual VM (runtime)
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr21 | 12.05.2015.
Analiza threadova
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr22 | 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 | info@evolva.hr | www.evolva.hr23 | 12.05.2015.
Praćenje threadova - vizualno
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr24 | 12.05.2015.
Praćenje threadova - pretraživanje
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr25 | 12.05.2015.
Praćenje threadova - uzorkovanje
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr26 | 12.05.2015.
Logging
Orphan requests
Log extractor
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr27 | 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 | info@evolva.hr | www.evolva.hr28 | 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 | info@evolva.hr | www.evolva.hr30 | 12.05.2015.
Request logging + log extractor
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr31 | 12.05.2015.
Pradenje konekcija na bazi
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr32 | 12.05.2015.
Dekoracija konekcija
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr33 | 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 | info@evolva.hr | www.evolva.hr34 | 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 | info@evolva.hr | www.evolva.hr35 | 12.05.2015.
Segregacija upita/servisa
Database
JVM
⁞ Brzi upiti
Logika
za
odlučiva
nje
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 | info@evolva.hr | www.evolva.hr36 | 12.05.2015.
Pratiti performanse sustava
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr37 | 12.05.2015.
Zaključak
ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA?
POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr38 | 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
Hvala na pažnji
www.evolva.hr
info@evolva.hr
POSLOVNE WEB APLIKACIJE

More Related Content

Viewers also liked

Viewers also liked (20)

JavaCro'15 - Is history teaching us that Agile is dead - Roko Roić
JavaCro'15 - Is history teaching us that Agile is dead - Roko RoićJavaCro'15 - Is history teaching us that Agile is dead - Roko Roić
JavaCro'15 - Is history teaching us that Agile is dead - Roko Roić
 
Javantura v3 - Asseco SEE
Javantura v3 - Asseco SEEJavantura v3 - Asseco SEE
Javantura v3 - Asseco SEE
 
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
 
JavaCro'15 - Slick database library - Ivan Senji
JavaCro'15 - Slick database library - Ivan SenjiJavaCro'15 - Slick database library - Ivan Senji
JavaCro'15 - Slick database library - Ivan Senji
 
JavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad PečanacJavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad Pečanac
 
JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
JavaCro'15 - RESTful Web APIs Design - Denis KranjčecJavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
 
JavaCro'15 - Java Cloud - Marin Tadić
JavaCro'15 - Java Cloud - Marin TadićJavaCro'15 - Java Cloud - Marin Tadić
JavaCro'15 - Java Cloud - Marin Tadić
 
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
 
JavaCro'15 - GWT integration with Vaadin - Peter Lehto
JavaCro'15 - GWT integration with Vaadin - Peter LehtoJavaCro'15 - GWT integration with Vaadin - Peter Lehto
JavaCro'15 - GWT integration with Vaadin - Peter Lehto
 
JavaCro'15 - Reactive I/O - Ivan Turčinović
JavaCro'15 - Reactive I/O - Ivan TurčinovićJavaCro'15 - Reactive I/O - Ivan Turčinović
JavaCro'15 - Reactive I/O - Ivan Turčinović
 
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
JavaCro'15 - Java EE 8 - An instant snapshot - David DelabasseeJavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
 
JavaCro'15 - How to start agile transition - Ivan Krnić
JavaCro'15 - How to start agile transition - Ivan KrnićJavaCro'15 - How to start agile transition - Ivan Krnić
JavaCro'15 - How to start agile transition - Ivan Krnić
 
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
 
Javantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAKJavantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAK
 
JavaCro'15 - Secure Web Services Development - Askar Akhmerov
JavaCro'15 - Secure Web Services Development - Askar AkhmerovJavaCro'15 - Secure Web Services Development - Askar Akhmerov
JavaCro'15 - Secure Web Services Development - Askar Akhmerov
 
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
 
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
 
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
 
JavaCro'15 - Introduction to Apache Spark - Petar Zečević
JavaCro'15 - Introduction to Apache Spark - Petar ZečevićJavaCro'15 - Introduction to Apache Spark - Petar Zečević
JavaCro'15 - Introduction to Apache Spark - Petar Zečević
 
JavaCro'15 - GP GUI form generators - Daniel Strmečki
JavaCro'15 - GP GUI form generators - Daniel StrmečkiJavaCro'15 - GP GUI form generators - Daniel Strmečki
JavaCro'15 - GP GUI form generators - Daniel Strmečki
 

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

R11 Vadas One Click Clone
R11 Vadas One Click CloneR11 Vadas One Click Clone
R11 Vadas One Click Cloneguest9c64c8c
 
Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?Denis Kranjčec
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaFive
 
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeVert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeMihovil Rister
 
Gatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranjaGatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranjaA. Kranjec
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeMatija Šmalcelj
 
Backend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for BackendBackend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for BackendDragos Strugar
 
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platformaWeb::Strategija
 
You bought a WordPress theme and now what?
You bought a WordPress theme and now what?You bought a WordPress theme and now what?
You bought a WordPress theme and now what?Luka Peharda
 
Big Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzzBig Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzzwebburza
 

Similar to JavaCro'15 - Java application crashed, now what - Matija Tomašković (14)

R11 Vadas One Click Clone
R11 Vadas One Click CloneR11 Vadas One Click Clone
R11 Vadas One Click Clone
 
Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, Javantura
 
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil RisterJavantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
 
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeVert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
 
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan VučakJavantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
 
Gatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranjaGatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranja
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacije
 
Backend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for BackendBackend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for Backend
 
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
 
You bought a WordPress theme and now what?
You bought a WordPress theme and now what?You bought a WordPress theme and now what?
You bought a WordPress theme and now what?
 
Big Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzzBig Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzz
 
Programski jezik java
Programski jezik javaProgramski jezik java
Programski jezik java
 
Programski jezik java
Programski jezik javaProgramski jezik java
Programski jezik java
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Java cro'21 the best tools for java developers in 2021 - hujak
Java cro'21   the best tools for java developers in 2021 - hujakJava cro'21   the best tools for java developers in 2021 - hujak
Java cro'21 the best tools for java developers in 2021 - hujak
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK KeynoteJavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 

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

  • 1. POSLOVNE WEB APLIKACIJE12.05.2015. Matija Tomaškovid | Evolva, CEO Što kad se (s)ruši ili stane Java aplikacija?
  • 2. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr2 | 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
  • 3. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr3 | 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
  • 4. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr4 | 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
  • 5. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr5 | 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
  • 6. POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr6 | 12.05.2015. JVM crash - analiza
  • 7. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr7 | 12.05.2015. Situacija: JVM crash › hs_err_pid*.log datoteku kreira JVM kod rušenja › na vrhu je razlog
  • 8. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr8 | 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:WindowsSystem32 (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
  • 9. DEMO: JVM crash – native code
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr14 | 12.05.2015. Analiza memorije
  • 15. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr15 | 12.05.2015. Struktura memorije JVM-a JVM Heap memory: Java objects -Xmx=256m Non-heap: Tenured generationYoung 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 codeMetaspace (JDK 8) java.lang.StackOverflowError
  • 16. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr16 | 12.05.2015. Potrošnja memorije u usporedbi s ostalim
  • 17. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr17 | 12.05.2015. Potrošnja memorije u usporedbi s ostalim
  • 18. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr18 | 12.05.2015. Heap dump - analiza › Ručno: › %JAVA_HOME%binjmap -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/c ommunityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091
  • 19.
  • 20. DEMO: Eclipse MAT, IBM Heap Analyser, Visual VM (runtime)
  • 21. POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr21 | 12.05.2015. Analiza threadova
  • 22. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr22 | 12.05.2015. Praćenje threadova – blokade / dead loop Blokirani threadovi Dead loop / dead lock
  • 23. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr23 | 12.05.2015. Praćenje threadova - vizualno
  • 24. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr24 | 12.05.2015. Praćenje threadova - pretraživanje
  • 25. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr25 | 12.05.2015. Praćenje threadova - uzorkovanje
  • 26. POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr26 | 12.05.2015. Logging Orphan requests Log extractor
  • 27. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr27 | 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
  • 28. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr28 | 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
  • 30. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr30 | 12.05.2015. Request logging + log extractor
  • 31. POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr31 | 12.05.2015. Pradenje konekcija na bazi
  • 32. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr32 | 12.05.2015. Dekoracija konekcija
  • 33. POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr33 | 12.05.2015. Prevencija: što raditi da Java aplikacija radi bez zastoja
  • 34. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr34 | 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
  • 35. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr35 | 12.05.2015. Segregacija upita/servisa Database JVM ⁞ Brzi upiti Logika za odlučiva nje Brza akcija ⁞ Spori upiti Spori upit Spori izvještaj Brza validacija DB pool brzi DB pool spori
  • 36. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr36 | 12.05.2015. Pratiti performanse sustava
  • 37. POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr37 | 12.05.2015. Zaključak
  • 38. ŠTO KAD SE (S)RUŠI ILI STANE JAVA APLIKACIJA? POSLOVNE WEB APLIKACIJE | info@evolva.hr | www.evolva.hr38 | 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