2015-11-20 3 views
1

У меня есть проблемы с горячей передислокацией простого приложения Grails в Tomcat 8.Простой Grails 2.5.1 Утечки приложений загрузчиков классов с Groovy 2.4.4

Моей установка заключается в следующем:

  • Grails 2.5.1 новое приложение, только что созданный с create-app
  • Tomcat 8.0.28 (64 бит Linux бинарная версия)
  • Java 1.8.0_65-b17 HotSpot сервер VM

Tomcat также новая установка бренд, только модифицирована две вещи (как я хочу, чтобы использовать их в производстве):

server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" undeployOldVersions="true">

context.xml
<Context antiResourceLocking="true">

Я перезапустил сервер Tomcat. Согласно JVisualVM, он загрузил 2398 классов. После копирования файла войны, созданного grails prod war, и ожидая завершения развертывания, в нем было загружено 10 022 классов. После повторного копирования войны, вызвав повторное развертывание, у него было 16 300 классов.

Объем кучи оставался довольно постоянным, только использование MetaSpace значительно увеличилось (примерно с той же скоростью, что и количество классов).

Update

Использование ТЗР копать глубже, я заметил, что всегда есть 9 случаев, хранящие загрузчик классов жив. Они являются примерами org.codehaus.groovy.reflection.ClassInfo (по одному для каждой примитивной оболочки типа Java и Void). Эти ClassInfos ссылаются только на java.lang.ClassValue$Entry, который расширяет WeakReference, поэтому я действительно озадачен тем, как эти экземпляры не собирают мусор.

У кого-нибудь были подобные проблемы? Что может заставить этот загрузчик повесить?

+0

Вы можете развернуть свои классы вручную вместо войны – Ghayel

ответ

0

Этот вопрос связан с https://issues.apache.org/jira/browse/GROOVY-7591

Я не совсем понимаю этот вопрос, но я попытаюсь описать коротко:
Использование ClassValue (из-за JDK ошибку) предотвращает объекты из сборщика мусора , Конец в Groovy 2.4.5 временно отключил использование ClassValue, в то время как ошибка JDK исправлена.

Grails 2.5.1 по умолчанию использует groovy 2.4.4, поэтому для решения проблемы я заменил его на BuildConfig.groovy и перестроил приложение.

build 'org.codehaus.groovy:groovy-all:2.4.5' 
compile 'org.codehaus.groovy:groovy-all:2.4.5' 
Смежные вопросы