Решение проблемы PermGen при повторном развертывании с Jetty 7 - PullRequest
6 голосов
/ 25 июля 2011

После нескольких дней отладки мне удалось успешно повторно развернуть веб-приложение среднего и большого размера на Tomcat 6.0.32 без каких-либо утечек PermGen. Я увидел падение PermGen после того, как оно заполнилось, и загрузчики классов были собраны в мусор.

После долгих радостей я попытался заставить приложение без утечек повторно развернуться в нашей среде разработки, которая состоит из плагина Maven и Jetty.

К сожалению, похоже, я столкнулся с ограничением сервера, как показано на скриншоте ниже

снимок экрана Yourkit http://img811.imageshack.us/img811/7320/jettyclassloaderbeanelr.png

Потоки запросов Jetty имеют сильную ссылку на BeanElResolver, который в свою очередь имеет сильную ссылку на несколько классов из моего веб-приложения.

Я не нашел ссылки на то, как очистить эту информацию.

Как я могу удалить эту последнюю PermGen утечку из моего приложения?


Обновление:

Я сделал следующее, чтобы исправить проблему, но не повезло:

  • обновлено до последней версии Jetty Plugin (как 7.4.5, так и 8.0.0.M3)
  • использовался коллектор CMS: -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

Обновление 2:

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Это реальная ошибка в реализации EL, которая исправлена ​​в последних версиях Jetty.

Версия 7.5.0 после выпуска будет содержать исправление.

0 голосов
/ 25 июля 2011

Не прямой ответ на ваш вопрос, но вы можете рассмотреть возможность использования JRebel в dev.С JRebel у вас, как правило, нет для повторного развертывания, что позволяет избежать утечек permgen и потерянного времени повторного развертывания.Это работает очень хорошо для меня.

...