$30 off During Our Annual Pro Sale. View Details »

JVM Tuning in a rush

JVM Tuning in a rush

When performance hits rock-bottom everybody (and their dog) is called upon and all of a sudden developers should have been responsible for last half a year or so and code with performance in mind (and deadlines, but that of course goes unsaid). So, here I'm talking about what can a dev do to meet those unreasonable demands and what might he do anticipating them.

Strictly JVM, mostly Sun Hotspot impl, but number of points can be used to other JVMs as well.

With more time, I usually show also tools available both on OS and JDK side.

Tomasz Borek

July 28, 2015
Tweet

More Decks by Tomasz Borek

Other Decks in Programming

Transcript

  1. • Infected in childhood • From me parents • Amstrad,

    ElWro Junior • Games! Doh! • Mem pages in DOS anyone? • In IT • ETL, crawlers, web-app, archi • IAAS, SAAS, own servers • Java 4 – 7, GNU/Linux, SQLs • Ardent “activist” Tomasz Borek
  2. Can be found in the net! :P https://lafkblogs.wordpress.com/ https://twitter.com/lafk_pl https://pl.linkedin.com/in/tjborek

    GeeCON, ChamberConf, Confitura, Lambda Days, LambdaCon, Java Developer Days, JavaDay Lviv, JavaDay Kiev
  3. So! Being a dev, you need: 1.To know your traffic

    and your app and your infra 2.To know recent changes
  4. So! Being a dev, you need: 1.To know your traffic

    and your app and your infra 2.To know recent changes 3.To know your limits (sometimes comes from point 1)
  5. So! Being a dev, you need: 1.To know your traffic

    and your app and your infra 2.To know recent changes 3.To know your limits (sometimes comes from point 1) 4.To have access to monitoring
  6. So! Being a dev, you need: 1.To know your traffic

    and your app and your infra 2.To know recent changes 3.To know your limits (sometimes comes from point 1) 4.To have access to monitoring 5.To adjust pooling (both thread and connection)
  7. So! Being a dev, you need: 1.To know your traffic

    and your app and your infra 2.To know recent changes 3.To know your limits (sometimes comes from point 1) 4.To have access to monitoring 5.To adjust pooling (both thread and connection) 6.To peruse logs and pull out anomalies
  8. So! Being a dev, you need: 1.To know your traffic

    and your app and your infra 2.To know recent changes 3.To know your limits (sometimes comes from point 1) 4.To have access to monitoring 5.To adjust pooling (both thread and connection) 6.To peruse logs and pull out anomalies 7.TO TUNE JVM
  9. So! Being a dev, you need: 1.To know your traffic

    and your app and your infra 2.To know recent changes 3.To know your limits (sometimes comes from point 1) 4.To have access to monitoring 5.To adjust pooling (both thread and connection) 6.To peruse logs and pull out anomalies 7.TO TUNE JVM
  10. JVM? Meaning? • Sun Hotspot • IBM • JRockit •

    IceTea • OpenJDK • TCK decides
  11. JVM? Meaning? • Sun Hotspot • IBM • JRockit •

    IceTea • OpenJDK • TCK decides
  12. JVM? Meaning? • Sun Hotspot – but which version? •

    IBM • JRockit • IceTea • OpenJDK • TCK decides
  13. JVM? Meaning? • Sun Hotspot – but which version? And

    architecture? • IBM • JRockit • IceTea • OpenJDK • TCK decides
  14. So! JVM tuning? 1.To adjust GC, based on it's logs

    2.To adjust (native) heap 3.Tweaking JVM starting flags
  15. So! JVM tuning? 1.To adjust GC, based on it's logs

    2.To adjust (native) heap 3.Tweaking JVM starting flags 4.To use TOOLS
  16. Being a process means • OS architecture enforces JVM architecture

    • Your memory is limited by OS and other processes – Heap is one – C-heap is another! • IO-wise and thread-wise: – Your threads and files opened are limited by ulimit • File descriptors!
  17. OOM flavours • Out of HeapSpace • PermGen error •

    Unable to create native thread • There are others, these are most popular
  18. API says OutOfMemoryError is • Thrown when the Java Virtual

    Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. OutOfMemoryError objects may be constructed by the virtual machine as if suppression were disabled and/or the stack trace was not writable.
  19. API says OutOfMemoryError is • Thrown when the Java Virtual

    Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. OutOfMemoryError objects may be constructed by the virtual machine as if suppression were disabled and/or the stack trace was not writable.
  20. API says OutOfMemoryError is • Due to failure in allocating

    an object after garbage collection. • Nothing about threads. • Nothing about PermGen.
  21. How much memory JVM uses? • Say you start it

    with Xmx == Xms == 1GB • 1GB?
  22. How much memory JVM uses? • Say you start it

    with Xmx == Xms == 1GB • 1GB? • Around 1GB?
  23. How much memory JVM uses? • Say you start it

    with Xmx == Xms == 1GB • 1GB? • Around 1GB? • If we talk about Java HEAP
  24. Memory management Entire RAM • 32 bits: can address less

    than 4GB. • 64 bits: can address… theoretically 16 EB. – Still – much more! • There's much more to 32vs64 but that's for another time
  25. Memory management Entire RAM What's left of RAM – C-HEAP

    JVM heap -Xmx • -Xms – minimal heap size • -Xmx – maximal heap size • When both should be set to same value?
  26. Memory management Entire RAM What's left of RAM – C-HEAP

    JVM heap What's left – C-HEAP JVM ops JVM heap -Xmx PermGen
  27. PermGen • Permanent Generation – Early Java – for JDK

    classes – and Strings • Back then – good idea • Now removed – JDK 7 – Strings no longer in PermGen – JDK 8 – no PermGen at all
  28. PermGen • Permanent Generation – Early Java – for JDK

    classes – and Strings • Back then – good idea • Now removed – JDK 7 – Strings no longer in PermGen – JDK 8 – no PermGen at all Quick fix? Increase PermGen size.
  29. GC • When it runs? • Minor collection? • Major

    collection? • How can a dev tune GC?
  30. Generational GC Tenured – where long-lived are promoted Eden –

    infants that die quickly • Studies showed: – most objects die young – Some live really long • Ergo: short- and long-lived division • Minor collection: Eden • Major collection: whole heap
  31. Generational GC - mechanics • In fact Eden has also

    2 Survivor spaces – To handle locality – Helps compress after freeing space – First promotion to survivor, then to tenured • Flags tell: – How many GCs object must survive to be promoted – How large Eden / Tenured / Survivors spaces are – What is logged (how details GC logs are) – Many, MANY more
  32. Memory management trade-offs • Large heap – large full GC

    – small native and C-heap? • Smaller heap – minor GC may be enough • Make sure your objects die young and only really long lived reach tenured
  33. JVM tuning 1.To adjust GC, based on it's logs 2.To

    adjust (native) heap 3.Tweaking JVM starting flags 4.To use TOOLS – later
  34. „The Box” • TRAFFIC: how is app used? • CODE:

    ? TRAFFIC: people, automatic Application CODE
  35. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... TRAFFIC: people, automatic CODE: threads, data structs, algo
  36. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: ? TRAFFIC: people, automatic CODE: threads, data structs, algo JVM
  37. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: ? TRAFFIC: people, automatic CODE: threads, data structs, algo JVM: flags, GC
  38. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: starting flags, GC • OS: ? TRAFFIC: people, automatic CODE: threads, data structs, algo JVM: flags, GC OS
  39. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: starting flags, GC • OS: ulimit, FS, config, archi, other procs… TRAFFIC: people, automatic CODE: threads, data structs, algo JVM: flags, GC OS: FS, config, limits
  40. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: starting flags, GC • OS: ulimit, FS, config, archi, other procs… • VIRT: ? TRAFFIC: people, automatic CODE: threads, data structs, algo JVM: flags, GC OS: FS, config, limits VIRT
  41. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: starting flags, GC • OS: ulimit, FS, config, archi, other procs… • VIRT: hell depends! TRAFFIC: people, automatic CODE: threads, data structs, algo JVM: flags, GC OS: FS, config, limits VIRT
  42. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: starting flags, GC • OS: ulimit, FS, config, archi, other procs… • VIRT: hell depends! • HARDWARE: ? TRAFFIC: people, automatic CODE: threads, data structs, algo JVM: flags, GC OS: FS, config, limits VIRT HARDWARE
  43. „The Box” • TRAFFIC: how is app used? • CODE:

    threads, algos, data structures... • JVM: starting flags, GC • OS: ulimit, FS, config, archi, other procs… • VIRT: hell depends! • HARDWARE: 32 vs 64, RAM, BIOS, drivers… TRAFFIC: people, automatic CODE: threads, data structs, algo JVM: flags, GC OS: FS, config, limits VIRT HARDWARE
  44. Brendan Gregg – USE • Utilization, Saturation, Errors • Use

    – how much in use is your resource • Saturation – how many requests await (waiting queue) • Errors – what errors are thrown by resource • http://www.brendangregg.com/usemethod.html • Create a checklist for each important resource, for finding out Utilization, Saturation and Errors and you'll know how to soon find out what is going on with resource
  45. How to find your java process? • ps … |

    grep java • pgrep java • jps
  46. jvisualvm • Deserves it's own slide • Profiler, sampler •

    Monitor (heap, threads, etc.) • Calls GC, does dumps
  47. SUMMARIZING • For being rushed – prepare in advance –

    Monitoring, logs, ceilings, etc. • Log GC • JVM is a process – all process limits in your OS apply • The Box • Brendan Gregg • GNU/Linux – tools unparalleled
  48. ?