Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JVM GCs and why should I care?

JVM GCs and why should I care?

Very brief introduction into JVM GC tuning given at a SoftwareMill tech talk.

Maciej Biłas

June 28, 2013
Tweet

More Decks by Maciej Biłas

Other Decks in Technology

Transcript

  1. How do I tell I have to? -verbose:gc -Xloggc:<filename> -XX:+PrintGCDetails

    -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime
  2. Yes, now you have to time since start: [Full] GC

    heap_taken_before_GC -> heap_taken_after_GC (total heap size) pause in seconds 29422.361: [Full GC 1704272K->1175099K(1781760K), 5.2196310 secs] 29427.588: [GC 1176939K(1781760K), 0.0135230 secs] 29430.034: [Full GC 1651801K->1239586K(1781760K), 5.3722150 secs] 29435.591: [Full GC 1411504K->1196906K(1781760K), 5.3212200 secs]
  3. Pro tips • Have a realistic stress test • Diagnose

    if the problem is GC-related • Define your performance goals
  4. Available collectors • Serial • Parallel • CMS (+ parallel

    new) • G1 • experimental in late Java 6, available in Java 7
  5. Perm gen • Perm gen does not count to heap

    size • Perm gen is gone since Java 8
  6. Client and server classes Machine Heap size GC Client ???

    Serial Server Initial: memory / 64
 Max:
 MIN(memory / 4, 1GiB) Parallel Source: http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc.ergonomics.default_size
  7. JSW after tuning 2022.201: [GC 2022.201: [ParNew: 2176832K- >139349K(2304000K), 0.1241120

    secs] 2311896K- >274413K(4864000K) icms_dc=0 , 0.1243120 secs] [Times: user=0.48 sys=0.00, real=0.13 secs] 2746.297: [GC 2746.298: [ParNew: 2187349K- >122293K(2304000K), 0.2227440 secs] 2322413K- >327073K(4864000K) icms_dc=0 , 0.2229290 secs] [Times: user=0.67 sys=0.08, real=0.23 secs] 3528.443: [GC 3528.443: [ParNew: 2170293K- >57977K(2304000K), 0.0544880 secs] 2375073K- >278050K(4864000K) icms_dc=0 , 0.0546750 secs] [Times: user=0.18 sys=0.02, real=0.06 secs]
  8. Not covered here • Most GC tuning flags • Go

    check them yourselves • Safe points • Other GC implementations • the pauseless one from Azul especially
  9. Resources • JVM 6.0 Tuning
 http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html • List of JVM

    options
 http://www.oracle.com/technetwork/java/javase/tech/vmoptions- jsp-140102.html • Sizing TLABs
 https://blogs.oracle.com/daviddetlefs/entry/tlab_sizing_an_annoying_little • Server class machine detection
 http://docs.oracle.com/javase/6/docs/technotes/guides/vm/server- class.html • Java Garbage Collection Distilled
 http://www.infoq.com/articles/Java_Garbage_Collection_Distilled