3. Mål
• Grunnleggende kunnskap om heap og tråder
• Ferdigheter til å ta en enkel analyse
• Gjenkjenne noen vanlige problemer
4. Agenda
• Demo
• Hva er garbage collection? Har vi det? Trenger vi
det?
• Hvordan analysere demo?
– Først med kommandolinjeverktøy
– Deretter med VisualVM
– Yourkit
• Hva har skjedd - vi ser på kode
• Analyse av minne- og trådlekkasje
• Demonstrasjon av ulike case
6. Demo – hva skjedde?
• Drift. Hva gjør vi nå? Restart?
• Første bud:
• Se i loggen!
7. Hvordan bli god!
• «Outliers»
• Som med leger: bør ha sett det før
• Hvordan få erfaring
– Oppsøke læring
– Ved å feile ofte, og lære av det
– Lære av andre
• Lære noe annet
• Nysgjerrig – drivkraft for å forstå hva som skjer
8. Konklusjon
• Ved unormal oppførsel...
• ...må vi ta vare på tilstrekkelig med info
– Jstack, over tid
– Jmap
– Applikasjonslogger
– Netstat, vmstat
– Munin / Melody
• Descartes++: Scientific method
• Sakichi Toyoda: 5 Whys!
9. Søppeltømming
Referansetelling
Kompromiss – tid og rom
Synkron, stop the world
Generasjonsbasert
Parallell
http://www.flickr.com/photos/peterkaminski/17964466/sizes/m/in/photostream/
Størrelse
11. • Forutsetning: De fleste objekter er kortlivet
• «weak generational hypothesis»
• Web app
• Ulike rom
– Young (Eden, S0, S1)
– Tenured/old
– Permanent
24. Ulike justeringer
• Maksimal størrelse på heap:
• -Xmx2300M
• -Xms2300M
• -XX:MaxPermSize=500M
• NewSize og Survivor ratio
25. Analyse av kræsj
• Caused by:
– java.lang.OutOfMemoryError: Java heap space
– java.lang.OutOfMemoryError: PermGen space
• Skru på: -verbose:gc
• jmap
• Skru på: -XX:+HeapDumpOnOutOfMemoryError
• VisualVM (/ NetBeans Profiler)
• Analyse av hprof (jhat)
• YourKit-analyse av hprof
26. Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity
at java.lang.AbstractStringBuilder.append
at java.lang.StringBuilder.append
at sun.misc.FloatingDecimal.appendTo
at java.lang.AbstractStringBuilder.append
at java.lang.StringBuilder.append
at net.spjelkavik.jz2010.HugeObject.<init>
at net.spjelkavik.jz2010.RiceCookerDao.getAll
at net.spjelkavik.jz2010.RiceCookerDao.findByPk
La oss undersøke...
VisualVM
YourKit
36. Tråder
• Hva er tråder?
• Hvordan ser vi dem?
– Jstack
– Jstack + shell
– Tda
http://www.flickr.com/photos/24557420@N05/4014146016/sizes/m/in/photostream/
37. Tråder – hva går galt
• Ulike tilstander
– WAITING, TIMED_WAIT
– RUNNABLE
– BLOCKED
• Mange som er BLOCKED, WAIT
• Mange som er RUNNABLE
• Vent noen minutter