Я переключил 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)