Я испытываю некоторые проблемы, связанные с производительностью (большую часть времени работает нормально, и время от времени наблюдается всплеск времени отклика со 100 мс до 4/5 без видимой причины) в службах, реализованных в OSB. Одна из гипотез, объясняющих эту ситуацию, заключается в том, что JVM может выполнять полный сбор мусора во время этих всплесков, и мы отслеживаем JVM с помощью управления миссией.
Администраторы говорят мне, что jvm работает с полностью отключенным gc, используя G1GC, и я вижу это в команде запуска:
-XX:+DisableExplicitGC
-XX:+UseG1GC
-XX:MaxGCPauseMillis=500 -verbosegc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
Кроме того, когда я анализирую журналы gc, не ведется регистрация выполненных полных сборщиков мусора, я мог только найти (что имеет смысл на основе этих конфигураций):
2017-05-02T04:46:10.916-0700: 39228.353: [GC pause (G1 Evacuation Pause) (young), 0.0173177 secs]
Однако, как только я включил бортовой регистратор в jmc и начал какое-то нагрузочное тестирование, я сразу заметил, что выполняются полные сборщики мусора.
и я вижу это в журналах:
2017-05-02T05:41:31.297: 548.719: [Full GC (Heap Inspection Initiated GC) 1780->705M(2048M), 3.040 secs]
Как только я отключу бортовой регистратор, я могу запускать один и тот же нагрузочный тест снова и снова, и в журналах не будет записано никаких полных сборщиков мусора.
Мне что-то здесь не хватает, или Flight Recorder действительно заставляет JVM выполнять полный сборщик мусора?
С Уважением