Hi Lokesh,
Here are my observations:
- If you see the "Heap before GC" and "Interactive Graphs" section, you will see full GC was triggered when your heap size reached around 253 mb.
- In order to increase the throughput, you will need to reduce the GC pause time. Because if your application is suffering from the long GC pause then it will also degrade your throughput.
Currently, your application is spending 44% of its time on GC activities and around 165 GC events took more than 5.0 seconds.
Your application is creating 422.95 MB of objects per second. This could be one of the reasons your application is having long GC pauses.
If your application's object creation rate is very high, then to keep with it, the garbage collection rate will also be very high. A high garbage collection rate will increase the GC pause time as well. Thus, optimizing the application to create fewer objects is THE EFFECTIVE strategy to reduce long GC pauses. This might be a time-consuming exercise, but it is 100% worth doing. In order to optimize object creation rate in the application, you can consider using java profilers like JProfiler , YourKit , JVisualVM...). These profilers will report:
+ What are the objects that created?
+ What is the rate at which these objects are created?
+ What is the amount of space they are occupying in memory?
+ Who is creating them?
Edit your Comment