У меня есть:
[*]многопоточное приложение, низкая задержка [*]64-разрядная серверная виртуальная машина OpenJDK версии 11.0.7+10 [*]конфигурация: Xms=6g Xmx=12g [*]Машина с 12 процессорами. [*]запущен в GCP (Google Cloud Platform) в Kubernetes.
Проблема:
[*]Когда я перехожу с java8 на java11, я наблюдаю ситуацию: приложение потребляет гораздо больше процессора и памяти, чем то же приложение с java8. Я подозреваю, что это GC. потому что когда я использую ParallelGC (устарело), все выглядит лучше (более стабильно)
-XX:+UseParallelGC -Xmx12g -Xms6g -XX:ParallelGCThreads=23
чем когда я использую G1GC (рекомендуется):
-XX:+UseG1GC -Xmx12g -Xms6g -XX:ParallelGCThreads=23 -XX:ConcGCThreads=4
Насколько я вижу, время ответа и количество обработанных сообщений одинаково (или почти одинаково). JConsole сообщает, что ParallelGC тратит гораздо больше времени на сборку мусора, чем на G1GC.
Вопрос: как уменьшить загрузку ЦП с помощью G1GC(?) в GCP Kubernetes
Может быть, проблема не в GC, а может, в чем-то другом – есть советы?
Здесь вы можете увидеть статистику из JConsole: на левом сайте — ParallelGC, на правом — G1GC. (следите за загрузкой ЦП - это одно и то же приложение - трафик аналогичен 22 тыс. сообщений, обработанных ParallelGC, и 18 тыс. сообщений для G1GC)
