2014-10-17 5 views
4

В настоящее время я запускаю многопользовательское JVM-приложение (которое включает классы groovy), и я наблюдал странное поведение.JVM-память очищена без какой-либо деятельности GC

Запуск приложения и обновление моих классов Groovy (правильная очистка информации о метаклассе и т. Д. - я знаю, что утечки нет), поэтому я знаю, что есть несколько классов, которые могут быть собраны из permgen (обычно я наблюдаю, что permgen isn Я собираюсь с нетерпением - я считаю, что это просто полный GC, который собирает перген, поэтому это не необычно для этого состояния). Странность заключается в том, что, если я оставлю приложение без активности, примерно через час произойдет внезапное падение использования памяти (куча и пермен, но наиболее выраженная в пермгене), но visualvm сообщает, что активность GC/CPU не произошла ,

Ниже приведен скриншот моего VisualVM входа

enter image description here

Мой вопрос, как есть такая большая капля (~ 80MB) в PermGen, не зарегистрированного GC деятельности? visualvm обычно нормально записывает активность GC/CPU.

+0

У вас есть журналы gc для этого времени? Они показывают, что происходит? –

+0

У вас нет журналов за базовым графиком - верхний левый график отображает активность CPU/GC, и, как вы можете видеть, нет активности, соответствующей большому падению использования перментонов (вверху справа) - я буду больше смотреть в gc logs, но visualvm обычно хорошо отображает GC/CPU в остальное время. – rhinds

ответ

0

Попробуйте установить плагин visualgc, чтобы выяснить, как работает gc в этой ситуации. Я предполагаю, что много объектов нового поколения было сброшено, но я не могу сказать это скриншотом.

+0

Это перменнящееся падение (граф сверху справа от изображения является пермгеном) - так не новое поколение. Вопрос состоял скорее в том, как было собрано ~ 80 мб перггена без регистрации активности GC (верхний левый график на изображении). – rhinds

+0

Как я могу воспроизвести это? – user3118958

+0

Самый простой способ - многократно загружать классы, но затем отпустить их, чтобы они были бесплатными для GC (например, с помощью Groovy, создания загрузчиков классов, загрузки классов, а затем выброса классов-загрузчиков). Если вы сделаете это во время мониторинга GC, вы, скорее всего, увидите, что пермг собирается только во время Full-GC, поэтому пермген может получить довольно много классов, которые могут быть собраны. Я только что оставил приложение запущенным (новые классы не загружаются), а затем через некоторое время (обычно около 1 часа больше) он просто упал. – rhinds