We have an application running on OpenJDK8 that has a high allocation rate (about 80 MB/sec) over the course of the whole day.
We noticed that the overall young generation gc times directly references to the occupation of the old generation, and is getting slower and slower. How is this even possible? Also, after an enforced FullGC, the average GC time is fast again, only to slowly increase again afterwards
The workload does not change much and there is plenty of OldGen space available. Yes there is promotion to the OldGen but this is intended and can not be optimized.
Here are two graphs as proof: OldGen YoungGen
Please ignore the spikes for the OldGen, this is just a measurement error. The red lines represent the GCs.
We use these startup parameters:
-server -Xms8g -Xmx15g -XX:MaxPermSize=2048m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -verbose:gc
Thanks in advance.