У нас есть приложение, работающее на OpenJDK8, которое имеет высокую скорость выделения (около 80 МБ / с) в течение всего дня.
Мы заметили, что общее время gc молодого поколения напрямую ссылается наоккупация старого поколения, и становится все медленнее и медленнее.Как это вообще возможно?Кроме того, после принудительного FullGC среднее время GC снова становится быстрым, а затем постепенно снова увеличивается
Рабочая нагрузка не сильно меняется, и имеется достаточно свободного пространства для OldGen.Да, есть продвижение к OldGen, но оно предназначено и не может быть оптимизировано.
Вот два графика в качестве доказательства: OldGen YoungGen
Пожалуйста, игнорируйте шипы для OldGen, это просто ошибка измерения.Красные линии представляют GC.
Мы используем следующие параметры запуска:
-server -Xms8g -Xmx15g -XX:MaxPermSize=2048m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -verbose:gc
Заранее спасибо.