Приложения замедляются с ростом метапространства - PullRequest
0 голосов
/ 24 октября 2018

Я только что перешел с Grails 2.4.3 на Grails 2.5.6 и с Java 7 на Java 8. Я пытаюсь установить оптимальный размер метапространства в своем приложении.

Фактический размер метапространства оказывает большое влияние на производительность приложения:

Используемое время мета-пространства и среднее время ответа:

  • 200 МБ - 339 мс
  • 300МБ - 380 мс
  • 400 МБ - 430 мс
  • 500 МБ - 460 мс
  • 600 МБ - 530 мс

Рост метапространствазапуск приложения до 620 МБ за 90 минут.

Это мои фактические настройки gc:

 -Xms14G -Xmx14G\
 -XX:+UseG1GC\
 -XX:ParallelGCThreads=8\
 -XX:ConcGCThreads=4\
 -XX:MaxGCPauseMillis=200\
 -XX:+UseLargePages\
 -XX:+UseLargePagesInMetaspace\
 -XX:+AlwaysPreTouch\
 -XX:InitialBootClassLoaderMetaspaceSize=512M\
 -XX:MetaspaceSize=512M\
 -XX:MinMetaspaceExpansion=8M\
 -XX:MaxMetaspaceExpansion=32M\
 -XX:+UseStringDeduplication\
 -XX:+ParallelRefProcEnabled\
 -XX:-TieredCompilation\

Когда MaxMetaspaceSize был установлен на 512M, то после нескольких часов работы мое приложение замедляется на 1 или 2раз за час.Время ответа составляет около 10 секунд.

У кого-нибудь была такая проблема?В ваших приложениях metaspace оказывает такое влияние на производительность?

1 Ответ

0 голосов
/ 24 октября 2018

Профилировали ли вы свое приложение?

Я бы сказал, что Сбор мусора в Metaspace был задействован здесь.Он собирает мертвые классы и загрузчики классов и срабатывает, когда использование метаданных класса достигает MaxMetaspaceSize (который был сужен на -XX:MaxMetaspaceSize).

...