Upload
henning-spjelkavik
View
574
Download
0
Embed Size (px)
Citation preview
Hvordan enkel analyse kan øke
stabiliteten og hastigheten på din server VM!
Javazone 2010 Henning Spjelkavik
Mål
• Grunnleggende kunnskap om heap og tråder
• Ferdigheter til å ta en enkel analyse
• Gjenkjenne noen vanlige problemer
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
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
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!
Søppeltømming
Referansetelling
Kompromiss – tid og rom
Synkron, stop the world
Generasjonsbasert
Parallell
Størrelse
http://www.flickr.com/photos/peterkaminski/17964466/sizes/m/in/photostream/
• Forutsetning: De fleste objekter er kortlivet
• «weak generational hypothesis»
• Web app
• Ulike rom
– Young (Eden, S0, S1)
– Tenured/old
– Permanent
jstat –gc S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
68 224 68 224 0 68 224 273 152 127 522 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 128 550 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 129 891 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 136 394 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 137 400 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 138 741 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 139 747 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 141 173 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 146 470 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 147 963 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
68 224 68 224 0 68 224 273 152 191 471 1 945 600 1 094 537 475 648 279 260 2 101 48 748 73 205.794 693.142
S0C – Survivor 0 Capacity – Total kapasitet S0U – Survivor 0 Usage – Hvor mye er i bruk EC/EU – Eden OC/OU – Old PC/PU – Permanent YGC – Antall Young Garbage Collections; YGCT – tid brukt i sekunder FGC – Full Garbage Collections; FGCT – tid bruk t i sekunder GCT – Total tid brukt på GC
Ulike justeringer
• Maksimal størrelse på heap: • -Xmx2300M
• -Xms2300M
• -XX:MaxPermSize=500M
• NewSize og Survivor ratio
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
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
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/
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
Sun JVM – Nyttige innstillinger
• -verbose:gc • -Xloggc:filename • -XX:NewRatio=2 • -XX:NewSize=400M • -Xmx2300M • -Xms2300M • -Xss256k • -XX:MaxPermSize=500M • -XX:+HeapDumpOnOutOfMemoryError • -XX:SurvivorRatio=4 • -XX:+PrintGCTimeStamps • -XX:+PrintGCDetails • -XX:+PrintTenuringDistribution • -Dcom.sun.management.jmxremote
: 331107K->49808K(341376K), 0.2074020 secs] 1545038K->1279509K(2286976K), 0.2077580 secs] [Times: user=1.47 sys=0.04,
real=0.21 secs]
30907.016: [GC 30907.016: [ParNew
Desired survivor size 34930688 bytes, new threshold 2 (max 15)
- age 1: 29166992 bytes, 29166992 total
- age 2: 18755920 bytes, 47922912 total
: 322960K->68224K(341376K), 0.3064430 secs] 1552661K->1316380K(2286976K), 0.3068160 secs] [Times: user=2.05 sys=0.02,
real=0.31 secs]
30943.112: [GC 30943.112: [ParNew
Desired survivor size 34930688 bytes, new threshold 2 (max 15)
- age 1: 21337224 bytes, 21337224 total
- age 2: 28749016 bytes, 50086240 total
: 341376K->68224K(341376K), 0.3763560 secs] 1589532K->1335548K(2286976K), 0.3767090 secs] [Times: user=2.68 sys=0.05,
real=0.38 secs]
30967.269: [GC 30967.269: [ParNew
Desired survivor size 34930688 bytes, new threshold 2 (max 15)
- age 1: 19882256 bytes, 19882256 total
- age 2: 20090752 bytes, 39973008 total
: 341336K->66012K(341376K), 0.3809380 secs] 1608661K->1361482K(2286976K), 0.3813470 secs] [Times: user=2.43 sys=0.04,
real=0.39 secs]
31004.752: [GC 31004.752: [ParNew
Desired survivor size 34930688 bytes, new threshold 2 (max 15)
- age 1: 21067240 bytes, 21067240 total
- age 2: 17356488 bytes, 38423728 total
: 339164K->49887K(341376K), 0.1708590 secs] 1634634K->1364287K(2286976K), 0.1712090 secs]
Konklusjon
http://labs.finn.no – http://labs.skiinfo.com
http://twitter.com/spjelkavik
http://groups.google.com/group/opptur
https://visualvm.dev.java.net/ http://www.yourkit.com/ http://kirk.blog-city.com/ http://tkyte.blogspot.com/
• Ved unormal oppførsel...
• ...må vi ta vare på tilstrekkelig med info
– Jstack, over tid, jmap
– Hprof
– Applikasjonslogger
– Netstat, vmstat
– OS-logger/grafer (Munin / Melody)
• Sakichi Toyoda: 5 Whys!