Prabhakar Jonnalagadda is the performance architect in Oracle. He was presented with a performance problem of an application which had following symptoms:

+ Frequent unavailability of the application (crash issues)

+ Significant degraded performance in repeated spells

In this post he talks about how he solved this application’s performance problems. He basically analyzes the GC log using GCeasy to understand the GC behavior. He then tweaks JVM arguments such as ‘-XX:ConcGCThreads’, ‘-XX:G1ReservePercent’, ‘-XX:InitiatingHeapOccupancyPercent’, ‘-XX:G1HeapRegionSize’, ‘-XX:G1HeapWastePercent’, ‘-XX:MaxGCPauseMillis’ and makes the application performance lot better. It’s an interesting read.

Prabhakar then concludes his post with following note (which we totally agree):

‘The tuning options recommended were very specific to this particular use case and usually remain unique for each and every application.  It is up to the engineers working on the problem to take reference of these and then adapt / modify them appropriately for their specific requirement as there is no ‘one size fits all’ concept.  The same problem could have been dealt with a different set of tuning parameters, and this is one of the many approaches and does not necessarily make this the only one solution.  Its up to the engineers who are workign on such problems to be intrigued and invest time in investigation and experiment as much to get things right.’