SlideShare une entreprise Scribd logo
1  sur  92
GC Tuning Confessions
Of A Performance
Engineer
Monica Beckwith
monica@codekaram.com
@mon_beck
www.linkedin.com/in/monicabeckwith
Strange Loop Conference
Sept. 25th, 2015
©2015 CodeKaram
About Me
• JVM/GC Performance Engineer/Consultant
• Worked at AMD, Sun, Oracle…
• Worked with HotSpot JVM
• JVM heuristics, JIT compiler, GCs:
Parallel(Old) GC, G1 GC, CMS GC
2
©2015 CodeKaram
About Today’s Talk
• A little bit about Performance Engineering
• Insight into Garbage Collectors
• OpenJDK HotSpot GCs
• The Tradeoffs
• GC Algorithms
• Key Topics
• Summary
• GC Tuneables
3
Performance
Engineering
4
©2015 CodeKaram
Performance Engineering
5
Requirements
Design
Performance
Requirements & Test
Plan & Development
Implementation
Performance
Analysis
©2015 CodeKaram
Performance Requirements
• Service level agreements (SLAs) for:
• throughput,
• latency and
• other response time related metrics E.g.
Response time (RT) metrics - Average (RT),
max or worst-case RT, 99th percentile RT…
6
©2015 CodeKaram
Response Time Metrics
Number of GC
events
Minimum (ms)
System1 37353 7.622
System2 34920 7.258
System3 36270 6.432
System4 40636 7.353
7
©2015 CodeKaram
Number of
GC events
Minimum
(ms)
Average
(ms)
System1 37353 7.622 307.741
System2 34920 7.258 320.778
System3 36270 6.432 321.483
System4 40636 7.353 323.143
8
Response Time Metrics
©2015 CodeKaram
Number
of GC
events
Minimum
(ms)
Average
(ms)
99th
Percentile
(ms)
System1 37353 7.622 307.741 940.901
System2 34920 7.258 320.778 1006.607
System3 36270 6.432 321.483 1004.018
System4 40636 7.353 323.143 1041.225
9
Response Time Metrics
©2015 CodeKaram
Number
of GC
events
Minimum
(ms)
Average
(ms)
99th
Percentile
(ms)
Maximum
(ms)
System
1
37353 7.622 307.741 940.901 3131.331
System
2
34920 7.258 320.778 1006.607 2744.588
System
3
36270 6.432 321.483 1004.018 1681.308
System
4
40636 7.353 323.143 1041.225 20699.505
10
Response Time Metrics
©2015 CodeKaram
Average (ms)
99th
Percentile
(ms)
Maximum
(ms)
System1 307.741 940.901 3131.331
System2 320.778 1006.607 2744.588
System3 321.483 1004.018 1681.308
System4 323.143 1041.225 20699.505
5 full GCs and 10 evacuation failures
11
Response Time Metrics
©2015 CodeKaram
Performance Analysis
• Monitoring: System Under Load
• Utilization - CPU, IO, Sys/ Kernel, Memory bandwidth, Java
heap, …
• Lock statistics
• Analyzing:
• Utilization and time spent - GC logs, CPU, memory and
application logs
• Profiling:
• Application, System, Memory - Java Heap.
12
©2015 CodeKaram
JVM Performance
Engineering
Java/JVM performance engineering includes the
study, analysis and tuning of the Just-in-time (JIT)
compiler, the Garbage Collector (GC) and many a
times tuning related to the Java Development Kit
(JDK).
13
©2015 CodeKaram
GC Performance
Engineering
• Monitor the JVM - Visual VM
• Monitor and collect GC information - Visual GC
(online), GC logs (offline)
• Develop scripts to process GC logs; use GC
Histo and JFreeCharts to plot your GC logs or
use specialized tools/ log analyzers that
serves your purpose.
14
Insight into GCs
15
©2015 CodeKaram
Fun Facts!
• GC can NOT eliminate your memory leaks!
• GC (and heap dump) can provide an insight
into your application.
16
©2015 CodeKaram
Ideal GC?
Maximize Throughput
17
©2015 CodeKaram
Ideal GC?
Maximize Throughput
Minimize Latency
18
©2015 CodeKaram
Ideal GC?
Maximize Throughput
Minimize Latency
Minimize Footprint
19
©2015 CodeKaram
The Reality!
• In reality, you will have to tradeoff one (footprint
or latency or throughput) in lieu of the others.
• A healthy performance engineering exercise
can help you meet or exceed your goals.
20
OpenJDK HotSpot
GCs: The Tradeoffs
21
©2015 CodeKaram
Fun Fact!
• Most OpenJDK HotSpot users would like
to increase their (Java) heap space but
they fear full garbage collections.
22
©2015 CodeKaram
The Tradeoff -
• Throughput and latency are the two main drivers
towards refinement of GC algorithms.
23
©2015 CodeKaram
The Throughput Maximizer
• Throughput has driven us to parallelization of GC worker threads:
• Parallel Collection Threads
• Parallel Concurrent Marking Threads
• Throughput has driven us to generational GCs
• Most objects die young.
• Fast path allocation into “young” generation.
• Age and then promote (fast path again) to “old” generation
• Fun Fact: All GCs in OpenJDK HotSpot are generational.
24
©2015 CodeKaram
Mr. Latency Sensitive
• Latency has driven algorithms to no compaction or partial compaction
• Time is of essence, no need to fully compact if free space is still
available!
• Latency has driven algorithms towards concurrency - i.e. running with
the application threads.
• Mostly concurrent mark and sweep (CMS) and concurrent marking
in G1.
• Fun Fact: All GCs in OpenJDK HotSpot fallback to a fully compacting
stop-the-world garbage collection called the “full” GC.
• Tuning can help avoid or postpone full GCs in many cases.
25
OpenJDK HotSpot
GCs: Algorithms
26
©2015 CodeKaram
Young
GC
Thread
Java
Application
Threads
Old GC
Thread
Java
Application
Threads
Java
Application
Threads
The Serial Collector
27
©2015 CodeKaram
Young
GC
Threads
Java
Application
Threads
Old GC
Threads
Java
Application
Threads
Java
Application
Threads
The Throughput Collector
28
©2015 CodeKaram
The CMS Collector
Young
GC
Threads
Java
Application
Threads
CMS
Initial
Mark
Threads
Java
Application
Threads
Java
Application
Threads
Young
GC
Threads
CMS
Remark
Threads
Java
Application
Threads
Java
Application
Threads
Concurrent
CMS
Threads
Concurrent
CMS
Threads
Concurrent
CMS
Threads
29
GC Algorithms - Key
Topics
30
Promotion Failures In The
Throughput Collector
31
©2015 CodeKaram
The Throughput Collector -
Java Heap
Eden S0 S1 Old Generation
Young Generation
Allocations
Survivors
Tenured
32
©2015 CodeKaram
Old Generation
Free Space
Occupied Space
The Throughput Collector -
Contiguous Old Generation
33
©2015 CodeKaram
Old Generation
To-be Promoted Object 1
The Throughput Collector -
Contiguous Old Generation
34
©2015 CodeKaram
Old Generation
Free Space
Occupied Space
The Throughput Collector -
Contiguous Old Generation
35
©2015 CodeKaram
Old Generation
To-be Promoted Object 2
The Throughput Collector -
Contiguous Old Generation
36
©2015 CodeKaram
Old Generation
Free Space
Occupied Space
The Throughput Collector -
Contiguous Old Generation
37
©2015 CodeKaram
Old Generation
To-be Promoted Object 3
The Throughput Collector -
Contiguous Old Generation
38
©2015 CodeKaram
Old Generation
The Throughput Collector -
Contiguous Old Generation
39
Free Space
Occupied Space
Promotion Failures &
Concurrent Mode Failures
In The CMS Collector
40
©2015 CodeKaram
The CMS Collector -
Contiguous Old Generation
41
Old Generation
Free List
Free Space
Occupied Space
©2015 CodeKaram
Old Generation
To-be Promoted Object 1
The CMS Collector -
Contiguous Old Generation
42
©2015 CodeKaram
Old Generation
Free List
Free Space
Occupied Space
The CMS Collector -
Contiguous Old Generation
43
©2015 CodeKaram
Old Generation
To-be Promoted Object 2
The CMS Collector -
Contiguous Old Generation
44
©2015 CodeKaram
Old Generation
Free List
Free Space
Occupied Space
The CMS Collector -
Contiguous Old Generation
45
©2015 CodeKaram
X
Old Generation
To-be Promoted Object 3
The CMS Collector -
Contiguous Old Generation
46
©2015 CodeKaram
X
Old Generation
To-be Promoted Object 3
The CMS Collector -
Contiguous Old Generation
47
©2015 CodeKaram
X
Old Generation
To-be Promoted Object 3
The CMS Collector -
Contiguous Old Generation
48
©2015 CodeKaram
X
Old Generation
To-be Promoted Object 3
The CMS Collector -
Contiguous Old Generation
49
©2015 CodeKaram
Old Generation
To-be Promoted Object 3
??
The CMS Collector -
Contiguous Old Generation
50
©2015 CodeKaram
Old Generation
To-be Promoted Object 3
Promotion Failure!!
The CMS Collector -
Contiguous Old Generation
51
©2015 CodeKaram
• When CMS just can’t keep up with the promotion
rate
• Your old generation is getting filled before a
concurrent cycle can free up space and
complete.
• Causes - marking threshold is too high, heap too
small, or high application mutation rate
52
The CMS Collector -
Concurrent Mode Failures
Incremental Compaction
In The G1 Collector
53
©2015 CodeKaram
The Garbage First Collector
- Regionalized Heap
Eden
Old Old
Eden
Old
Survivor
Humongous
54
©2015 CodeKaram
The Garbage First Collector
Eden
Old Old
Eden
Old
Surv
ivor
E.g.: Current heap configuration -
55
©2015 CodeKaram
The Garbage First Collector
Eden
Old Old
Eden
Old
Surv
ivor
E.g.: During a young collection -
56
©2015 CodeKaram
The Garbage First Collector
Old Old
Old
E.g.: After a young collection -
Sur
vivor
Old
57
©2015 CodeKaram
The Garbage First Collector
Old Old
Old
E.g.: Current heap configuration -
Sur
vivor
Old
Eden Eden
Old
58
©2015 CodeKaram
Old Old
Old
E.g.: Reclamation of a garbage-filled region during the
cleanup phase -
Sur
vivor
Old
Eden Eden
Old
The Garbage First Collector
59
©2015 CodeKaram
Old Old
Old
E.g.: Reclamation of a garbage-filled region during the
cleanup phase -
Sur
vivor
Old
Eden Eden
The Garbage First Collector
60
©2015 CodeKaram
Old Old
Old
E.g.: Current heap configuration -
Sur
vivor
Old
Eden Eden
The Garbage First Collector
61
©2015 CodeKaram
Old Old
Old
E.g.: During a mixed collection -
Sur
vivor
Old
Eden Eden
The Garbage First Collector
62
©2015 CodeKaram
Old
E.g.: After a mixed collection -
O
ld
Surv
ivor
Old
The Garbage First Collector
63
Promotion/Evacuation
Failures In The G1
Collector
64
©2015 CodeKaram
• When there are no more regions available for
survivors or tenured objects, G1 GC encounters
an evacuation failure.
• An evacuation failure is expensive and the usual
pattern is that if you see a couple of evacuation
failures; full GC will soon follow.
The Garbage First Collector
- Evacuation Failures
65
©2015 CodeKaram
Avoid over-tuning! - Set a pause time goal and provide the heap
limits
Try increasing your heap size.
Check if humongous allocations are the cause of your problem.
Adjust the marking threshold.
Try increasing your concurrent threads to help reduce the time
for concurrent marking phase.
If survivor objects are the issue, try increase the
G1ReservePercent
The Garbage First Collector -
Avoiding Evacuation Failures
66
Fragmentation In The
G1 Collector
67
©2015 CodeKaram
• G1 GC is designed to “absorb” some
fragmentation.
• Default is 5% of the total Java heap
• Tradeoff so that expensive regions are left out.
G1 Heap Waste Percentage
68
G1 GC: Humongous
Objects
69
©2015 CodeKaram
• Objects >= 50% of G1 region size == Humongous Objects
• These objects are allocated directly into the old generation into
Humongous Regions
• If a humongous object is bigger than a G1 region, then the
humongous regions that contain it have to be contiguous.
• Ideally, humongous objects are few in number and are short
lived.
• Can cause evacuation failures if application allocates a lot
of long-lived humongous objects, since humongous
regions add to the old generation occupancy.
The Garbage First Collector
- Humongous Objects
70
G1 GC Logs - Key
Topics
71
©2015 CodeKaram
G1 GC Log
154.431: [GC pause (G1 Evacuation Pause) (young), 0.2584864 secs]
[Parallel Time: 253.2 ms, GC Workers: 8]
[GC Worker Start (ms): Min: 154431.3, Avg: 154431.4, Max: 154431.5, Diff: 0.1]
[Ext Root Scanning (ms): Min: 0.1, Avg: 0.2, Max: 0.3, Diff: 0.1, Sum: 1.4]
[Update RS (ms): Min: 3.3, Avg: 3.5, Max: 3.8, Diff: 0.6, Sum: 28.2]
[Processed Buffers: Min: 3, Avg: 3.5, Max: 5, Diff: 2, Sum: 28]
[Scan RS (ms): Min: 46.1, Avg: 46.4, Max: 46.7, Diff: 0.6, Sum: 371.2]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.5]
[Object Copy (ms): Min: 202.7, Avg: 202.8, Max: 202.9, Diff: 0.3, Sum: 1622.4]
[Termination (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.5]
[GC Worker Other (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.6]
[GC Worker Total (ms): Min: 253.0, Avg: 253.1, Max: 253.1, Diff: 0.1, Sum: 2024.7]
[GC Worker End (ms): Min: 154684.5, Avg: 154684.5, Max: 154684.5, Diff: 0.1]
[Code Root Fixup: 0.1 ms]
[Code Root Purge: 0.0 ms]
[Clear CT: 0.7 ms]
[Other: 4.4 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 0.3 ms]
[Ref Enq: 0.0 ms]
[Redirty Cards: 0.3 ms]
[Humongous Reclaim: 0.0 ms]
[Free CSet: 3.2 ms]
[Eden: 4972.0M(4972.0M)->0.0B(4916.0M) Survivors: 148.0M->204.0M Heap: 5295.8M(10.0G)->379.4M(10.0G)]
[Times: user=1.72 sys=0.14, real=0.26 secs]
72
©2015 CodeKaram
Generation Sizing
[Eden: 4972.0M(4972.0M)->0.0B(4916.0M) Survi√vors:
148.0M->204.0M Heap: 5295.8M(10.0G)->379.4M(10.0G)]
[Eden: Occupancy before GC(Eden size
before GC)->Occupancy after GC(Eden size
after GC) Survivors: Size before GC->Size
after GC Heap: Occupancy before GC(Heap
size before GC)->Occupancy after GC(Heap
size after GC)]
73
©2015 CodeKaram
Scaling: GC Times vs Sys Times
[Times: user=1.72 sys=0.14, real=0.26 secs]
Scaling: user time/real time = 6.6
74
©2015 CodeKaram
Reference Processing Times
[Ref Proc: 0.3 ms]
Check for high time spent in ‘Ref Proc’.
Also, check your Remark pause times:
9.972: [GC remark 9.972: [Finalize Marking, 0.0007865 secs] 9.973:
[GC ref-proc, 0.0027669 secs] 9.976: [Unloading, 0.0075832 secs],
0.0116215 secs]
If Remark pauses are high or increasing and if
‘ref-proc’ is the major contributor - use: -XX:
+ParallelRefProcEnabled
75
©2015 CodeKaram
GC Overhead vs Elapsed
Time
Overhead is an indication of the frequency of stop the
world GC events.
The more frequent the GC events - The more likely
it is to negatively impact application throughput
GC Elapsed Time indicated the amount of time it takes
to execute stop the world GC events
The higher the GC elapsed time - the lower the
application responsiveness due to the GC induced
latencies
76
Summary
77
©2015 CodeKaram
Most Allocations Eden Space
Eden Full? Start Young Collection: Keep Allocating :)
Objects Aged in Survivor Space? Promote: Keep Aging :)
Fast Path
Promotions
Fast Path
Old Generation
CMS promotes to fitting free space out of a free list.
What have we learned so
far?
78
©2015 CodeKaram
What have we learned so far? -
Young Generation & Collections
• Young generation is always collected in its entirety.
• All 3 server GCs discussed earlier follow similar
mechanism for young collection.
• The young collections achieve reclamation via
compaction and copying of live objects.
• There are a lot of options for sizing the Eden and
Survivor space optimally and many GCs also have
adaptive sizing and GC ergonomics for young
generation collections.
79
©2015 CodeKaram
All 3 server GCs vary in the way they collect the old generation:
• For ParallelOld GC, the old generation is reclaimed and
compacted in its entirety
• Luckily, the compaction cost is distributed amongst parallel
garbage collector worker threads.
• Unluckily, the compaction cost depends a lot on the make of
the live data set since at every compaction, the GC is moving
live data around.
• No tuning options other than the generation size adjustment
and age threshold for promotion.
80
What have we learned so far?
- Old Generation & Collections
©2015 CodeKaram
• For CMS GC, the old generation is (mostly) concurrently marked
and swept. Thus the reclamation of dead objects happen in place
and the space is added to a free list of spaces.
• The marking threshold can be tuned adaptively and manually as
well.
• Luckily, CMS GC doesn’t do compaction, hence reclamation is fast.
• Unluckily, a long running Java application with CMS GC is prone to
fragmentation which will eventually result in promotion failures
which can eventually lead to full compacting garbage collection
and sometimes even concurrent mode failures.
• Full compacting GCs are singled threaded in CMS GC.
What have we learned so far?
- Old Generation & Collections
81
©2015 CodeKaram
• For G1 GC, the old generation regions are (mostly) concurrently marked and
an incremental compacting collection helps with optimizing the old generation
collection.
• Luckily, fragmentation is not “untunable” in G1 GC as it is in CMS GC.
• Unluckily, sometimes, you may still encounter promotion/evacuation failures
when G1 GC runs out of regions to copy live objects. Such an evacuation
failure is expensive and can eventually lead to a full compacting GC.
• Full compacting GCs are singled threaded in G1 GC.
• Appropriate tuning of the old generation space and collection can help
avoid evacuation failures and hence keep full GCs at bay.
• G1 GC has multiple tuning options so that the GC can be adapted to your
application needs.
82
What have we learned so far?
- Old Generation & Collections
Summary - The
Tuneables
83
©2015 CodeKaram
GC Tuneables - The
Throughput Collector
Goal:
Only promote objects after you have hazed
them appropriately
aged
Tunables:
Everything related to aging objects and
generation sizing -
NewRatio, (Max)NewSize, SurvivorRatio,
(Max)TenuringThreshold
84
©2015 CodeKaram
GC Tuneables - The
Throughput Collector
Things to remember -
• Applications with steady behavior rarely need
AdaptiveSizePolicy to be enabled.
• Overflow gets promoted into the old generation
• Provide larger survivor spaces for long-lived transient data.
• In most cases, young generation sizing has the most effect
on throughput
• Size the young generation to maintain the GC overhead to
less than 5%.
85
©2015 CodeKaram
GC Tuneables - The CMS
Collector
Goal:
Only promote objects after you have hazed
them appropriately
aged
Tunables:
Everything related to aging objects and young
generation sizing still applies here.
The concurrent thread counts and marking
threshold are addition tunables for CMS
86
©2015 CodeKaram
GC Tuneables - The CMS
Collector
Things to remember -
• Premature promotions are very expensive in CMS and could lead to
fragmentation
• You can reduce the CMS cycle duration by adding more concurrent
threads: ConcGCThreads.
• Remember that this will increase the concurrent overhead.
• You can manually tune the marking threshold (adaptive by default)
• CMSInitiatingOccupancyFraction & UseCMSInitiatingOccupancyOnly
will help fix the marking threshold.
• Note: The threshold is expressed as a percentage of the old generation
occupancy
87
©2015 CodeKaram
GC Tuneables - The G1
Collector
Goal:
Get the ergonomics to work for you and
know the defaults
Tunables:
• Pause time goal, heap size, max and min
nursery, concurrent and parallel threads
• The marking threshold, number of mixed GCs
after marking, liveness threshold for the old
regions, garbage toleration threshold, max old
regions to be collected per mixed collection
88
©2015 CodeKaram
GC Tuneables - The G1
Collector
Things to remember -
• Know your defaults!
• Understand your G1HeapRegionSize - It could be any factor of
two from 1MB to 32MB. G1 strives for 2048 regions.
• Fixing the nursery size (using Xmn) will meddle with the GC
ergonomics/adaptiveness.
• Don’t set really aggressive pause time goals - this will increase the
GC overhead.
• Spend time taming your mixed GCs - mixed GCs are incremental
collections
89
©2015 CodeKaram
GC Tuneables - The G1
Collector
Things to remember -
• Taming mixed GCs:
• Adjust the marking cycle according to you live data set.
• Adjust you liveness threshold - this is the live occupancy threshold
per region. Any region with liveness beyond this threshold will not
be included in a mixed collection.
• Adjust your garbage toleration threshold - helps G1 not get too
aggressive with mixed collections
• Distribute mixed GC pauses over a number of mixed collections -
adjust your mixed GC count target and change your max old region
threshold percent so that you can limit the old regions per collection
90
©2015 CodeKaram
Further Reading
91
©2015 CodeKaram
Further Reading
• Jon Masa’s blog: https://blogs.oracle.com/
jonthecollector/entry/our_collectors
• A few of my articles on InfoQ: http://
www.infoq.com/author/Monica-Beckwith
• Presentations: http://www.slideshare.net/
MonicaBeckwith
• Mail archives on hotspot-gc-use@openjdk.java.net
& hotspot-gc-dev@openjdk.java.net
92

Contenu connexe

Tendances

Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...
Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...
Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...Monica Beckwith
 
Game of Performance: A Song of JIT and GC
Game of Performance: A Song of JIT and GCGame of Performance: A Song of JIT and GC
Game of Performance: A Song of JIT and GCMonica Beckwith
 
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORSOPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORSMonica Beckwith
 
Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!Monica Beckwith
 
Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!Monica Beckwith
 
Optimizing {Java} Application Performance on Kubernetes
Optimizing {Java} Application Performance on KubernetesOptimizing {Java} Application Performance on Kubernetes
Optimizing {Java} Application Performance on KubernetesDinakar Guniguntala
 
Processing Terabytes of data every day … and sleeping at night (infiniteConf ...
Processing Terabytes of data every day … and sleeping at night (infiniteConf ...Processing Terabytes of data every day … and sleeping at night (infiniteConf ...
Processing Terabytes of data every day … and sleeping at night (infiniteConf ...Luciano Mammino
 
Strata Singapore: Gearpump Real time DAG-Processing with Akka at Scale
Strata Singapore: GearpumpReal time DAG-Processing with Akka at ScaleStrata Singapore: GearpumpReal time DAG-Processing with Akka at Scale
Strata Singapore: Gearpump Real time DAG-Processing with Akka at ScaleSean Zhong
 
Stacking up with OpenStack: Building for High Availability
Stacking up with OpenStack: Building for High AvailabilityStacking up with OpenStack: Building for High Availability
Stacking up with OpenStack: Building for High AvailabilityOpenStack Foundation
 
Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...
Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...
Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...Flink Forward
 
Reactive mistakes reactive nyc
Reactive mistakes   reactive nycReactive mistakes   reactive nyc
Reactive mistakes reactive nycPetr Zapletal
 
Dip into prometheus
Dip into prometheusDip into prometheus
Dip into prometheusZaar Hai
 
Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...
Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...
Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...confluent
 
Open stack HA - Theory to Reality
Open stack HA -  Theory to RealityOpen stack HA -  Theory to Reality
Open stack HA - Theory to RealitySriram Subramanian
 
High Availability in OpenStack Cloud
High Availability in OpenStack CloudHigh Availability in OpenStack Cloud
High Availability in OpenStack CloudQiming Teng
 
Cassandra Summit 2014: Cyanite — Better Graphite Storage with Apache Cassandra
Cassandra Summit 2014: Cyanite — Better Graphite Storage with Apache CassandraCassandra Summit 2014: Cyanite — Better Graphite Storage with Apache Cassandra
Cassandra Summit 2014: Cyanite — Better Graphite Storage with Apache CassandraDataStax Academy
 

Tendances (19)

Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...
Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...
Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...
 
Game of Performance: A Song of JIT and GC
Game of Performance: A Song of JIT and GCGame of Performance: A Song of JIT and GC
Game of Performance: A Song of JIT and GC
 
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORSOPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
 
Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!
 
Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!
 
Tuning the g1gc
Tuning the g1gcTuning the g1gc
Tuning the g1gc
 
Trouble with memory
Trouble with memoryTrouble with memory
Trouble with memory
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance Tuning
 
Optimizing {Java} Application Performance on Kubernetes
Optimizing {Java} Application Performance on KubernetesOptimizing {Java} Application Performance on Kubernetes
Optimizing {Java} Application Performance on Kubernetes
 
Processing Terabytes of data every day … and sleeping at night (infiniteConf ...
Processing Terabytes of data every day … and sleeping at night (infiniteConf ...Processing Terabytes of data every day … and sleeping at night (infiniteConf ...
Processing Terabytes of data every day … and sleeping at night (infiniteConf ...
 
Strata Singapore: Gearpump Real time DAG-Processing with Akka at Scale
Strata Singapore: GearpumpReal time DAG-Processing with Akka at ScaleStrata Singapore: GearpumpReal time DAG-Processing with Akka at Scale
Strata Singapore: Gearpump Real time DAG-Processing with Akka at Scale
 
Stacking up with OpenStack: Building for High Availability
Stacking up with OpenStack: Building for High AvailabilityStacking up with OpenStack: Building for High Availability
Stacking up with OpenStack: Building for High Availability
 
Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...
Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...
Virtual Flink Forward 2020: Cogynt: Flink without code - Samantha Chan, Aslam...
 
Reactive mistakes reactive nyc
Reactive mistakes   reactive nycReactive mistakes   reactive nyc
Reactive mistakes reactive nyc
 
Dip into prometheus
Dip into prometheusDip into prometheus
Dip into prometheus
 
Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...
Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...
Everything You Always Wanted to Know About Kafka's Rebalance Protocol but Wer...
 
Open stack HA - Theory to Reality
Open stack HA -  Theory to RealityOpen stack HA -  Theory to Reality
Open stack HA - Theory to Reality
 
High Availability in OpenStack Cloud
High Availability in OpenStack CloudHigh Availability in OpenStack Cloud
High Availability in OpenStack Cloud
 
Cassandra Summit 2014: Cyanite — Better Graphite Storage with Apache Cassandra
Cassandra Summit 2014: Cyanite — Better Graphite Storage with Apache CassandraCassandra Summit 2014: Cyanite — Better Graphite Storage with Apache Cassandra
Cassandra Summit 2014: Cyanite — Better Graphite Storage with Apache Cassandra
 

En vedette

Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Monica Beckwith
 
Cassandra as event sourced journal for big data analytics
Cassandra as event sourced journal for big data analyticsCassandra as event sourced journal for big data analytics
Cassandra as event sourced journal for big data analyticsAnirvan Chakraborty
 
Garbage collection
Garbage collectionGarbage collection
Garbage collectionsoeun Lee
 
Scaling wix with microservices architecture jax london-2015
Scaling wix with microservices architecture jax london-2015Scaling wix with microservices architecture jax london-2015
Scaling wix with microservices architecture jax london-2015Aviran Mordo
 
Java micro-services
Java micro-servicesJava micro-services
Java micro-servicesJames Lewis
 
Apache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-DataApache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-DataGuido Schmutz
 
G1 Garbage Collector: Details and Tuning
G1 Garbage Collector: Details and TuningG1 Garbage Collector: Details and Tuning
G1 Garbage Collector: Details and TuningSimone Bordet
 

En vedette (7)

Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
 
Cassandra as event sourced journal for big data analytics
Cassandra as event sourced journal for big data analyticsCassandra as event sourced journal for big data analytics
Cassandra as event sourced journal for big data analytics
 
Garbage collection
Garbage collectionGarbage collection
Garbage collection
 
Scaling wix with microservices architecture jax london-2015
Scaling wix with microservices architecture jax london-2015Scaling wix with microservices architecture jax london-2015
Scaling wix with microservices architecture jax london-2015
 
Java micro-services
Java micro-servicesJava micro-services
Java micro-services
 
Apache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-DataApache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-Data
 
G1 Garbage Collector: Details and Tuning
G1 Garbage Collector: Details and TuningG1 Garbage Collector: Details and Tuning
G1 Garbage Collector: Details and Tuning
 

Similaire à GC Tuning Confessions Of A Performance Engineer - Improved :)

millions-gc-jax-2022.pptx
millions-gc-jax-2022.pptxmillions-gc-jax-2022.pptx
millions-gc-jax-2022.pptxTier1 app
 
Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...
Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...
Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...Spark Summit
 
淺談 Java GC 原理、調教和 新發展
淺談 Java GC 原理、調教和新發展淺談 Java GC 原理、調教和新發展
淺談 Java GC 原理、調教和 新發展Leon Chen
 
How to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning BattleHow to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning BattleCapgemini
 
Why use Gitlab
Why use GitlabWhy use Gitlab
Why use Gitlababenyeung1
 
Why and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company GrowsWhy and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company GrowsNGINX, Inc.
 
this-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptxthis-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptxTier1 app
 
QCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVM
QCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVMQCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVM
QCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVMAzul Systems, Inc.
 
Building a Better JVM
Building a Better JVMBuilding a Better JVM
Building a Better JVMSimon Ritter
 
Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...
Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...
Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...NodejsFoundation
 
G1 collector and tuning and Cassandra
G1 collector and tuning and CassandraG1 collector and tuning and Cassandra
G1 collector and tuning and CassandraChris Lohfink
 
Javaland_JITServerTalk.pptx
Javaland_JITServerTalk.pptxJavaland_JITServerTalk.pptx
Javaland_JITServerTalk.pptxGrace Jansen
 
Jvm problem diagnostics
Jvm problem diagnosticsJvm problem diagnostics
Jvm problem diagnosticsDanijel Mitar
 
Products & Services for Microelectronics
Products & Services for MicroelectronicsProducts & Services for Microelectronics
Products & Services for MicroelectronicsKamal Karimanal
 
Target: Performance Tuning Cassandra at Target
Target: Performance Tuning Cassandra at TargetTarget: Performance Tuning Cassandra at Target
Target: Performance Tuning Cassandra at TargetDataStax Academy
 
Hadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GC
Hadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GCHadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GC
Hadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GCErik Krogen
 
DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...
DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...
DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...RichHagarty
 
MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...
MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...
MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...MongoDB
 
Clr jvm implementation differences
Clr jvm implementation differencesClr jvm implementation differences
Clr jvm implementation differencesJean-Philippe BEMPEL
 

Similaire à GC Tuning Confessions Of A Performance Engineer - Improved :) (20)

millions-gc-jax-2022.pptx
millions-gc-jax-2022.pptxmillions-gc-jax-2022.pptx
millions-gc-jax-2022.pptx
 
Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...
Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...
Taming GC Pauses for Humongous Java Heaps in Spark Graph Computing-(Eric Kacz...
 
淺談 Java GC 原理、調教和 新發展
淺談 Java GC 原理、調教和新發展淺談 Java GC 原理、調教和新發展
淺談 Java GC 原理、調教和 新發展
 
How to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning BattleHow to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning Battle
 
Why use Gitlab
Why use GitlabWhy use Gitlab
Why use Gitlab
 
Why and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company GrowsWhy and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company Grows
 
this-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptxthis-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptx
 
QCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVM
QCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVMQCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVM
QCon London: Low latency Java in the real world - LMAX Exchange and the Zing JVM
 
Building a Better JVM
Building a Better JVMBuilding a Better JVM
Building a Better JVM
 
Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...
Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...
Are your v8 garbage collection logs speaking to you?Joyee Cheung -Alibaba Clo...
 
G1 collector and tuning and Cassandra
G1 collector and tuning and CassandraG1 collector and tuning and Cassandra
G1 collector and tuning and Cassandra
 
Javaland_JITServerTalk.pptx
Javaland_JITServerTalk.pptxJavaland_JITServerTalk.pptx
Javaland_JITServerTalk.pptx
 
Lecture 2a
Lecture 2aLecture 2a
Lecture 2a
 
Jvm problem diagnostics
Jvm problem diagnosticsJvm problem diagnostics
Jvm problem diagnostics
 
Products & Services for Microelectronics
Products & Services for MicroelectronicsProducts & Services for Microelectronics
Products & Services for Microelectronics
 
Target: Performance Tuning Cassandra at Target
Target: Performance Tuning Cassandra at TargetTarget: Performance Tuning Cassandra at Target
Target: Performance Tuning Cassandra at Target
 
Hadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GC
Hadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GCHadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GC
Hadoop Meetup Jan 2019 - Dynamometer and a Case Study in NameNode GC
 
DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...
DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...
DevNexus 2024: Just-In-Time Compilation as a Service for cloud-native Java mi...
 
MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...
MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...
MongoDB World 2019: From Traditional Oil and Gas to Sustainable Energy OR Fro...
 
Clr jvm implementation differences
Clr jvm implementation differencesClr jvm implementation differences
Clr jvm implementation differences
 

Plus de Monica Beckwith

The ilities of software engineering.pptx
The ilities of software engineering.pptxThe ilities of software engineering.pptx
The ilities of software engineering.pptxMonica Beckwith
 
Applying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBBApplying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBBMonica Beckwith
 
Intro to Garbage Collection
Intro to Garbage CollectionIntro to Garbage Collection
Intro to Garbage CollectionMonica Beckwith
 
OpenJDK Concurrent Collectors
OpenJDK Concurrent CollectorsOpenJDK Concurrent Collectors
OpenJDK Concurrent CollectorsMonica Beckwith
 

Plus de Monica Beckwith (7)

The ilities of software engineering.pptx
The ilities of software engineering.pptxThe ilities of software engineering.pptx
The ilities of software engineering.pptx
 
A G1GC Saga-KCJUG.pptx
A G1GC Saga-KCJUG.pptxA G1GC Saga-KCJUG.pptx
A G1GC Saga-KCJUG.pptx
 
ZGC-SnowOne.pdf
ZGC-SnowOne.pdfZGC-SnowOne.pdf
ZGC-SnowOne.pdf
 
QCon London.pdf
QCon London.pdfQCon London.pdf
QCon London.pdf
 
Applying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBBApplying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBB
 
Intro to Garbage Collection
Intro to Garbage CollectionIntro to Garbage Collection
Intro to Garbage Collection
 
OpenJDK Concurrent Collectors
OpenJDK Concurrent CollectorsOpenJDK Concurrent Collectors
OpenJDK Concurrent Collectors
 

Dernier

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 

Dernier (20)

Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 

GC Tuning Confessions Of A Performance Engineer - Improved :)

  • 1. GC Tuning Confessions Of A Performance Engineer Monica Beckwith monica@codekaram.com @mon_beck www.linkedin.com/in/monicabeckwith Strange Loop Conference Sept. 25th, 2015
  • 2. ©2015 CodeKaram About Me • JVM/GC Performance Engineer/Consultant • Worked at AMD, Sun, Oracle… • Worked with HotSpot JVM • JVM heuristics, JIT compiler, GCs: Parallel(Old) GC, G1 GC, CMS GC 2
  • 3. ©2015 CodeKaram About Today’s Talk • A little bit about Performance Engineering • Insight into Garbage Collectors • OpenJDK HotSpot GCs • The Tradeoffs • GC Algorithms • Key Topics • Summary • GC Tuneables 3
  • 5. ©2015 CodeKaram Performance Engineering 5 Requirements Design Performance Requirements & Test Plan & Development Implementation Performance Analysis
  • 6. ©2015 CodeKaram Performance Requirements • Service level agreements (SLAs) for: • throughput, • latency and • other response time related metrics E.g. Response time (RT) metrics - Average (RT), max or worst-case RT, 99th percentile RT… 6
  • 7. ©2015 CodeKaram Response Time Metrics Number of GC events Minimum (ms) System1 37353 7.622 System2 34920 7.258 System3 36270 6.432 System4 40636 7.353 7
  • 8. ©2015 CodeKaram Number of GC events Minimum (ms) Average (ms) System1 37353 7.622 307.741 System2 34920 7.258 320.778 System3 36270 6.432 321.483 System4 40636 7.353 323.143 8 Response Time Metrics
  • 9. ©2015 CodeKaram Number of GC events Minimum (ms) Average (ms) 99th Percentile (ms) System1 37353 7.622 307.741 940.901 System2 34920 7.258 320.778 1006.607 System3 36270 6.432 321.483 1004.018 System4 40636 7.353 323.143 1041.225 9 Response Time Metrics
  • 10. ©2015 CodeKaram Number of GC events Minimum (ms) Average (ms) 99th Percentile (ms) Maximum (ms) System 1 37353 7.622 307.741 940.901 3131.331 System 2 34920 7.258 320.778 1006.607 2744.588 System 3 36270 6.432 321.483 1004.018 1681.308 System 4 40636 7.353 323.143 1041.225 20699.505 10 Response Time Metrics
  • 11. ©2015 CodeKaram Average (ms) 99th Percentile (ms) Maximum (ms) System1 307.741 940.901 3131.331 System2 320.778 1006.607 2744.588 System3 321.483 1004.018 1681.308 System4 323.143 1041.225 20699.505 5 full GCs and 10 evacuation failures 11 Response Time Metrics
  • 12. ©2015 CodeKaram Performance Analysis • Monitoring: System Under Load • Utilization - CPU, IO, Sys/ Kernel, Memory bandwidth, Java heap, … • Lock statistics • Analyzing: • Utilization and time spent - GC logs, CPU, memory and application logs • Profiling: • Application, System, Memory - Java Heap. 12
  • 13. ©2015 CodeKaram JVM Performance Engineering Java/JVM performance engineering includes the study, analysis and tuning of the Just-in-time (JIT) compiler, the Garbage Collector (GC) and many a times tuning related to the Java Development Kit (JDK). 13
  • 14. ©2015 CodeKaram GC Performance Engineering • Monitor the JVM - Visual VM • Monitor and collect GC information - Visual GC (online), GC logs (offline) • Develop scripts to process GC logs; use GC Histo and JFreeCharts to plot your GC logs or use specialized tools/ log analyzers that serves your purpose. 14
  • 16. ©2015 CodeKaram Fun Facts! • GC can NOT eliminate your memory leaks! • GC (and heap dump) can provide an insight into your application. 16
  • 18. ©2015 CodeKaram Ideal GC? Maximize Throughput Minimize Latency 18
  • 19. ©2015 CodeKaram Ideal GC? Maximize Throughput Minimize Latency Minimize Footprint 19
  • 20. ©2015 CodeKaram The Reality! • In reality, you will have to tradeoff one (footprint or latency or throughput) in lieu of the others. • A healthy performance engineering exercise can help you meet or exceed your goals. 20
  • 21. OpenJDK HotSpot GCs: The Tradeoffs 21
  • 22. ©2015 CodeKaram Fun Fact! • Most OpenJDK HotSpot users would like to increase their (Java) heap space but they fear full garbage collections. 22
  • 23. ©2015 CodeKaram The Tradeoff - • Throughput and latency are the two main drivers towards refinement of GC algorithms. 23
  • 24. ©2015 CodeKaram The Throughput Maximizer • Throughput has driven us to parallelization of GC worker threads: • Parallel Collection Threads • Parallel Concurrent Marking Threads • Throughput has driven us to generational GCs • Most objects die young. • Fast path allocation into “young” generation. • Age and then promote (fast path again) to “old” generation • Fun Fact: All GCs in OpenJDK HotSpot are generational. 24
  • 25. ©2015 CodeKaram Mr. Latency Sensitive • Latency has driven algorithms to no compaction or partial compaction • Time is of essence, no need to fully compact if free space is still available! • Latency has driven algorithms towards concurrency - i.e. running with the application threads. • Mostly concurrent mark and sweep (CMS) and concurrent marking in G1. • Fun Fact: All GCs in OpenJDK HotSpot fallback to a fully compacting stop-the-world garbage collection called the “full” GC. • Tuning can help avoid or postpone full GCs in many cases. 25
  • 29. ©2015 CodeKaram The CMS Collector Young GC Threads Java Application Threads CMS Initial Mark Threads Java Application Threads Java Application Threads Young GC Threads CMS Remark Threads Java Application Threads Java Application Threads Concurrent CMS Threads Concurrent CMS Threads Concurrent CMS Threads 29
  • 30. GC Algorithms - Key Topics 30
  • 31. Promotion Failures In The Throughput Collector 31
  • 32. ©2015 CodeKaram The Throughput Collector - Java Heap Eden S0 S1 Old Generation Young Generation Allocations Survivors Tenured 32
  • 33. ©2015 CodeKaram Old Generation Free Space Occupied Space The Throughput Collector - Contiguous Old Generation 33
  • 34. ©2015 CodeKaram Old Generation To-be Promoted Object 1 The Throughput Collector - Contiguous Old Generation 34
  • 35. ©2015 CodeKaram Old Generation Free Space Occupied Space The Throughput Collector - Contiguous Old Generation 35
  • 36. ©2015 CodeKaram Old Generation To-be Promoted Object 2 The Throughput Collector - Contiguous Old Generation 36
  • 37. ©2015 CodeKaram Old Generation Free Space Occupied Space The Throughput Collector - Contiguous Old Generation 37
  • 38. ©2015 CodeKaram Old Generation To-be Promoted Object 3 The Throughput Collector - Contiguous Old Generation 38
  • 39. ©2015 CodeKaram Old Generation The Throughput Collector - Contiguous Old Generation 39 Free Space Occupied Space
  • 40. Promotion Failures & Concurrent Mode Failures In The CMS Collector 40
  • 41. ©2015 CodeKaram The CMS Collector - Contiguous Old Generation 41 Old Generation Free List Free Space Occupied Space
  • 42. ©2015 CodeKaram Old Generation To-be Promoted Object 1 The CMS Collector - Contiguous Old Generation 42
  • 43. ©2015 CodeKaram Old Generation Free List Free Space Occupied Space The CMS Collector - Contiguous Old Generation 43
  • 44. ©2015 CodeKaram Old Generation To-be Promoted Object 2 The CMS Collector - Contiguous Old Generation 44
  • 45. ©2015 CodeKaram Old Generation Free List Free Space Occupied Space The CMS Collector - Contiguous Old Generation 45
  • 46. ©2015 CodeKaram X Old Generation To-be Promoted Object 3 The CMS Collector - Contiguous Old Generation 46
  • 47. ©2015 CodeKaram X Old Generation To-be Promoted Object 3 The CMS Collector - Contiguous Old Generation 47
  • 48. ©2015 CodeKaram X Old Generation To-be Promoted Object 3 The CMS Collector - Contiguous Old Generation 48
  • 49. ©2015 CodeKaram X Old Generation To-be Promoted Object 3 The CMS Collector - Contiguous Old Generation 49
  • 50. ©2015 CodeKaram Old Generation To-be Promoted Object 3 ?? The CMS Collector - Contiguous Old Generation 50
  • 51. ©2015 CodeKaram Old Generation To-be Promoted Object 3 Promotion Failure!! The CMS Collector - Contiguous Old Generation 51
  • 52. ©2015 CodeKaram • When CMS just can’t keep up with the promotion rate • Your old generation is getting filled before a concurrent cycle can free up space and complete. • Causes - marking threshold is too high, heap too small, or high application mutation rate 52 The CMS Collector - Concurrent Mode Failures
  • 53. Incremental Compaction In The G1 Collector 53
  • 54. ©2015 CodeKaram The Garbage First Collector - Regionalized Heap Eden Old Old Eden Old Survivor Humongous 54
  • 55. ©2015 CodeKaram The Garbage First Collector Eden Old Old Eden Old Surv ivor E.g.: Current heap configuration - 55
  • 56. ©2015 CodeKaram The Garbage First Collector Eden Old Old Eden Old Surv ivor E.g.: During a young collection - 56
  • 57. ©2015 CodeKaram The Garbage First Collector Old Old Old E.g.: After a young collection - Sur vivor Old 57
  • 58. ©2015 CodeKaram The Garbage First Collector Old Old Old E.g.: Current heap configuration - Sur vivor Old Eden Eden Old 58
  • 59. ©2015 CodeKaram Old Old Old E.g.: Reclamation of a garbage-filled region during the cleanup phase - Sur vivor Old Eden Eden Old The Garbage First Collector 59
  • 60. ©2015 CodeKaram Old Old Old E.g.: Reclamation of a garbage-filled region during the cleanup phase - Sur vivor Old Eden Eden The Garbage First Collector 60
  • 61. ©2015 CodeKaram Old Old Old E.g.: Current heap configuration - Sur vivor Old Eden Eden The Garbage First Collector 61
  • 62. ©2015 CodeKaram Old Old Old E.g.: During a mixed collection - Sur vivor Old Eden Eden The Garbage First Collector 62
  • 63. ©2015 CodeKaram Old E.g.: After a mixed collection - O ld Surv ivor Old The Garbage First Collector 63
  • 65. ©2015 CodeKaram • When there are no more regions available for survivors or tenured objects, G1 GC encounters an evacuation failure. • An evacuation failure is expensive and the usual pattern is that if you see a couple of evacuation failures; full GC will soon follow. The Garbage First Collector - Evacuation Failures 65
  • 66. ©2015 CodeKaram Avoid over-tuning! - Set a pause time goal and provide the heap limits Try increasing your heap size. Check if humongous allocations are the cause of your problem. Adjust the marking threshold. Try increasing your concurrent threads to help reduce the time for concurrent marking phase. If survivor objects are the issue, try increase the G1ReservePercent The Garbage First Collector - Avoiding Evacuation Failures 66
  • 67. Fragmentation In The G1 Collector 67
  • 68. ©2015 CodeKaram • G1 GC is designed to “absorb” some fragmentation. • Default is 5% of the total Java heap • Tradeoff so that expensive regions are left out. G1 Heap Waste Percentage 68
  • 70. ©2015 CodeKaram • Objects >= 50% of G1 region size == Humongous Objects • These objects are allocated directly into the old generation into Humongous Regions • If a humongous object is bigger than a G1 region, then the humongous regions that contain it have to be contiguous. • Ideally, humongous objects are few in number and are short lived. • Can cause evacuation failures if application allocates a lot of long-lived humongous objects, since humongous regions add to the old generation occupancy. The Garbage First Collector - Humongous Objects 70
  • 71. G1 GC Logs - Key Topics 71
  • 72. ©2015 CodeKaram G1 GC Log 154.431: [GC pause (G1 Evacuation Pause) (young), 0.2584864 secs] [Parallel Time: 253.2 ms, GC Workers: 8] [GC Worker Start (ms): Min: 154431.3, Avg: 154431.4, Max: 154431.5, Diff: 0.1] [Ext Root Scanning (ms): Min: 0.1, Avg: 0.2, Max: 0.3, Diff: 0.1, Sum: 1.4] [Update RS (ms): Min: 3.3, Avg: 3.5, Max: 3.8, Diff: 0.6, Sum: 28.2] [Processed Buffers: Min: 3, Avg: 3.5, Max: 5, Diff: 2, Sum: 28] [Scan RS (ms): Min: 46.1, Avg: 46.4, Max: 46.7, Diff: 0.6, Sum: 371.2] [Code Root Scanning (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.5] [Object Copy (ms): Min: 202.7, Avg: 202.8, Max: 202.9, Diff: 0.3, Sum: 1622.4] [Termination (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.5] [GC Worker Other (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.6] [GC Worker Total (ms): Min: 253.0, Avg: 253.1, Max: 253.1, Diff: 0.1, Sum: 2024.7] [GC Worker End (ms): Min: 154684.5, Avg: 154684.5, Max: 154684.5, Diff: 0.1] [Code Root Fixup: 0.1 ms] [Code Root Purge: 0.0 ms] [Clear CT: 0.7 ms] [Other: 4.4 ms] [Choose CSet: 0.0 ms] [Ref Proc: 0.3 ms] [Ref Enq: 0.0 ms] [Redirty Cards: 0.3 ms] [Humongous Reclaim: 0.0 ms] [Free CSet: 3.2 ms] [Eden: 4972.0M(4972.0M)->0.0B(4916.0M) Survivors: 148.0M->204.0M Heap: 5295.8M(10.0G)->379.4M(10.0G)] [Times: user=1.72 sys=0.14, real=0.26 secs] 72
  • 73. ©2015 CodeKaram Generation Sizing [Eden: 4972.0M(4972.0M)->0.0B(4916.0M) Survi√vors: 148.0M->204.0M Heap: 5295.8M(10.0G)->379.4M(10.0G)] [Eden: Occupancy before GC(Eden size before GC)->Occupancy after GC(Eden size after GC) Survivors: Size before GC->Size after GC Heap: Occupancy before GC(Heap size before GC)->Occupancy after GC(Heap size after GC)] 73
  • 74. ©2015 CodeKaram Scaling: GC Times vs Sys Times [Times: user=1.72 sys=0.14, real=0.26 secs] Scaling: user time/real time = 6.6 74
  • 75. ©2015 CodeKaram Reference Processing Times [Ref Proc: 0.3 ms] Check for high time spent in ‘Ref Proc’. Also, check your Remark pause times: 9.972: [GC remark 9.972: [Finalize Marking, 0.0007865 secs] 9.973: [GC ref-proc, 0.0027669 secs] 9.976: [Unloading, 0.0075832 secs], 0.0116215 secs] If Remark pauses are high or increasing and if ‘ref-proc’ is the major contributor - use: -XX: +ParallelRefProcEnabled 75
  • 76. ©2015 CodeKaram GC Overhead vs Elapsed Time Overhead is an indication of the frequency of stop the world GC events. The more frequent the GC events - The more likely it is to negatively impact application throughput GC Elapsed Time indicated the amount of time it takes to execute stop the world GC events The higher the GC elapsed time - the lower the application responsiveness due to the GC induced latencies 76
  • 78. ©2015 CodeKaram Most Allocations Eden Space Eden Full? Start Young Collection: Keep Allocating :) Objects Aged in Survivor Space? Promote: Keep Aging :) Fast Path Promotions Fast Path Old Generation CMS promotes to fitting free space out of a free list. What have we learned so far? 78
  • 79. ©2015 CodeKaram What have we learned so far? - Young Generation & Collections • Young generation is always collected in its entirety. • All 3 server GCs discussed earlier follow similar mechanism for young collection. • The young collections achieve reclamation via compaction and copying of live objects. • There are a lot of options for sizing the Eden and Survivor space optimally and many GCs also have adaptive sizing and GC ergonomics for young generation collections. 79
  • 80. ©2015 CodeKaram All 3 server GCs vary in the way they collect the old generation: • For ParallelOld GC, the old generation is reclaimed and compacted in its entirety • Luckily, the compaction cost is distributed amongst parallel garbage collector worker threads. • Unluckily, the compaction cost depends a lot on the make of the live data set since at every compaction, the GC is moving live data around. • No tuning options other than the generation size adjustment and age threshold for promotion. 80 What have we learned so far? - Old Generation & Collections
  • 81. ©2015 CodeKaram • For CMS GC, the old generation is (mostly) concurrently marked and swept. Thus the reclamation of dead objects happen in place and the space is added to a free list of spaces. • The marking threshold can be tuned adaptively and manually as well. • Luckily, CMS GC doesn’t do compaction, hence reclamation is fast. • Unluckily, a long running Java application with CMS GC is prone to fragmentation which will eventually result in promotion failures which can eventually lead to full compacting garbage collection and sometimes even concurrent mode failures. • Full compacting GCs are singled threaded in CMS GC. What have we learned so far? - Old Generation & Collections 81
  • 82. ©2015 CodeKaram • For G1 GC, the old generation regions are (mostly) concurrently marked and an incremental compacting collection helps with optimizing the old generation collection. • Luckily, fragmentation is not “untunable” in G1 GC as it is in CMS GC. • Unluckily, sometimes, you may still encounter promotion/evacuation failures when G1 GC runs out of regions to copy live objects. Such an evacuation failure is expensive and can eventually lead to a full compacting GC. • Full compacting GCs are singled threaded in G1 GC. • Appropriate tuning of the old generation space and collection can help avoid evacuation failures and hence keep full GCs at bay. • G1 GC has multiple tuning options so that the GC can be adapted to your application needs. 82 What have we learned so far? - Old Generation & Collections
  • 84. ©2015 CodeKaram GC Tuneables - The Throughput Collector Goal: Only promote objects after you have hazed them appropriately aged Tunables: Everything related to aging objects and generation sizing - NewRatio, (Max)NewSize, SurvivorRatio, (Max)TenuringThreshold 84
  • 85. ©2015 CodeKaram GC Tuneables - The Throughput Collector Things to remember - • Applications with steady behavior rarely need AdaptiveSizePolicy to be enabled. • Overflow gets promoted into the old generation • Provide larger survivor spaces for long-lived transient data. • In most cases, young generation sizing has the most effect on throughput • Size the young generation to maintain the GC overhead to less than 5%. 85
  • 86. ©2015 CodeKaram GC Tuneables - The CMS Collector Goal: Only promote objects after you have hazed them appropriately aged Tunables: Everything related to aging objects and young generation sizing still applies here. The concurrent thread counts and marking threshold are addition tunables for CMS 86
  • 87. ©2015 CodeKaram GC Tuneables - The CMS Collector Things to remember - • Premature promotions are very expensive in CMS and could lead to fragmentation • You can reduce the CMS cycle duration by adding more concurrent threads: ConcGCThreads. • Remember that this will increase the concurrent overhead. • You can manually tune the marking threshold (adaptive by default) • CMSInitiatingOccupancyFraction & UseCMSInitiatingOccupancyOnly will help fix the marking threshold. • Note: The threshold is expressed as a percentage of the old generation occupancy 87
  • 88. ©2015 CodeKaram GC Tuneables - The G1 Collector Goal: Get the ergonomics to work for you and know the defaults Tunables: • Pause time goal, heap size, max and min nursery, concurrent and parallel threads • The marking threshold, number of mixed GCs after marking, liveness threshold for the old regions, garbage toleration threshold, max old regions to be collected per mixed collection 88
  • 89. ©2015 CodeKaram GC Tuneables - The G1 Collector Things to remember - • Know your defaults! • Understand your G1HeapRegionSize - It could be any factor of two from 1MB to 32MB. G1 strives for 2048 regions. • Fixing the nursery size (using Xmn) will meddle with the GC ergonomics/adaptiveness. • Don’t set really aggressive pause time goals - this will increase the GC overhead. • Spend time taming your mixed GCs - mixed GCs are incremental collections 89
  • 90. ©2015 CodeKaram GC Tuneables - The G1 Collector Things to remember - • Taming mixed GCs: • Adjust the marking cycle according to you live data set. • Adjust you liveness threshold - this is the live occupancy threshold per region. Any region with liveness beyond this threshold will not be included in a mixed collection. • Adjust your garbage toleration threshold - helps G1 not get too aggressive with mixed collections • Distribute mixed GC pauses over a number of mixed collections - adjust your mixed GC count target and change your max old region threshold percent so that you can limit the old regions per collection 90
  • 92. ©2015 CodeKaram Further Reading • Jon Masa’s blog: https://blogs.oracle.com/ jonthecollector/entry/our_collectors • A few of my articles on InfoQ: http:// www.infoq.com/author/Monica-Beckwith • Presentations: http://www.slideshare.net/ MonicaBeckwith • Mail archives on hotspot-gc-use@openjdk.java.net & hotspot-gc-dev@openjdk.java.net 92