Что не так с запуском приложения на сервере Tomcat? - PullRequest
0 голосов
/ 07 декабря 2009

Недавно я создал веб-проект на основе maven и использовал tomcat в качестве сервера приложений для отладки ...

Но tomcat часто не работает (ошибка pergem, что означает отсутствие записи) после запуска приложения из контекстного меню Project напрямую.

Хуже всего то, что создано множество свободных потоков и все они не могут быть уничтожены вручную.

И состояние tomcat также не может быть обнаружено NetBeans, его нельзя остановить и перезапустить. Я должен перезагрузить мою систему, чтобы очистить их.

Моя система Fedora 12 x86 ... Версия Java - SUN JDK 6, обновление 17. Версия NetBeans - 6.7.1.

Я пытался создать ошибку по этому поводу, но разработчик NetBeans отклонил ее ... Я очень удивлен, что это большой пробел для использования NetBeans для разработки веб-приложения.

Сегодня я использовал JBoss 5.1 в последней версии NetBeans 6.8rc1, а также столкнулся с той же проблемой ... Я попытался настроить параметры виртуальной машины и выделить больше памяти, но без эффектов.

Я развернул несколько образцов шва в JBoss 5.1 с помощью сценария сборки seam ant, и проблем нет. Но я переключаюсь на использование NetBeans для этого, это не удалось из-за нехватки памяти.

Что не так ????

1 Ответ

4 голосов
/ 07 декабря 2009

(Я предполагаю, что праздные потоки, о которых вы говорите, являются потоками приложений. Если вы говорите о рабочих потоках Tomcat, то они не должны вызывать проблемы permgen во время простоя.)

Я пытался создать ошибку по этому поводу, но разработчик NetBeans отклонил ее ... Я очень удивлен ...

Я очень не удивлен. Это не проблема NetBeans. Это даже не проблема Tomcat или JBoss.

Проблема с незанятыми / потерянными потоками приложений заключается в том, что вы не можете безопасно уничтожать потоки в работающей JVM. А без возможности сделать это вы не сможете остановить утечки (в данном случае) пространства пермгена. По сути, это проблема платформы Java. Это может быть решено только тогда, когда JVM поддерживают механизмы изоляции, определенные JSR 121.

Но если предположить, что ваша проблема связана с выполнением горячего развертывания, вам нужно беспокоиться не только о незанятых потоках приложений. Если существует любой доступный экземпляр любого класса, который вы повторно развертываете, это приведет к тому, что исходный старый загрузчик классов и все загруженные им классы останутся достижимыми.

... это большой барьер для использования NetBeans для разработки веб-приложений.

Решение - перезапускать ваш веб-контейнер время от времени. Это очистит пустые нити и другие загрязнения и освободит место утечки пермгена. Вы можете улучшить его, запустив большую кучу и больше permgen, но вы не можете заставить его уйти, особенно если некоторые из потерянных потоков не простаивают ...

Ах да, и не будь большим ребенком! Это не ограничитель шоу, это всего лишь небольшое неудобство :-)

...