Подтвердить что ты не робот

Почему происходит ухудшение производительности после ~ 6 часов работы Java 9 G1 без фактического увеличения нагрузки?

Я переключил 1 экземпляр (2 vCPU, 2GB RAM, load ~ 4k req/sec) на Java 9 (с последней версии Java 8). Некоторое время все было в порядке, и загрузка процессора была такой же, как и раньше. Однако через 6 часов потребление ЦП увеличилось на 4% (с 21% до 25%) без причины. У меня не было пробок, потребление памяти не увеличилось, никаких метрических изменений (у меня есть счетчики для каждого метода в коде). Ничего.

Я оставил этот экземпляр незатронутым в течение ~ 12 часов, ожидая, что он вернется назад. Но ничего не изменилось. Он просто начал потреблять больше процессора.

Команда

top показала, что у экземпляра больше пиков процессора, чем обычно для процесса сервера Java. Недавно я читал, что G1 не подходит для высокой пропускной способности. Поэтому я сделал вывод, что причина может быть в G1.

Я перезапустил экземпляр с помощью

java -XX:+UseParallelGC -jar server-0.28.0.jar

И после ~ 20 часов мониторинга все нормально, как раньше. Потребление процессора находится на уровне 21%, как это было много дней назад.

Использование ЦП сразу после развертывания Java 9 (шкала 6h):

введите описание изображения здесь

Увеличение ЦП через 7 часов + 12 часов "нетронутого" (шкала 7d):

введите описание изображения здесь

CPU после - XX:+UseParallelGC (шкала 24 часа):

введите описание изображения здесь

Итак, мой вопрос - это ожидаемое поведение для G1? Кто-нибудь еще видит нечто подобное?

Ubuntu 16.04 x64

java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
4b9b3361

Ответ 1

У меня нет окончательного ответа, но мы используем psi-probe для мониторинга наших JVM (наши контейнеры для приложений - Tomcat 8+ используют JDK 1.8 для обслуживания динамических страниц), которые могут предоставить вам отличную картину использования памяти JVM (Eden, Survivor, Old Gen и т.д.) вместе с использованием CPU Utility, которая, надеюсь, поможет вам увидеть проблему с сборщиком мусора алгоритм, который вы ставите на работу.

psi-probe легко развертывается в любой среде - будь то производство или разработка. Если бы я был вами, я бы также продолжил, а также включил ведение журнала gc как предложение.. в вашей среде DEVEL и провести некоторое нагрузочное тестирование (я всегда вижу JMeter как очень удобный инструмент в таких случаях - простой, но мощный), чтобы увидеть, Я могу воспроизвести эту проблему. Нажимайте разные нагрузки и наблюдайте поведение JVM в реальном времени с помощью psi-зонда.