Вопрос по jboss, permgen, memory-management, java – Развертывание jBoss 4.0.2 одной и той же WAR несколько раз приводит к сбою jBoss из-за ошибок PermGem / Out-of-Memory

4

Я разрабатываю веб-приложения и использую jBoss 4.0.2, и, когда я несколько раз переустанавливаю свою WAR с помощью eclipse, jBoss вылетает из-за нехватки памяти. И когда мне нужно установить новую версию в производственную среду, она будет потреблять память рабочих серверов, что означает, что мне нужно остановить jBoss, чтобы предотвратить повторное развертывание оперативной памяти с клиентского сервера. Есть ли способ обойти эту проблему?

Ваш Ответ

3   ответа
0

я не уверенs связаны, но я подозреваю, что это так - JBoss не совместим с J2EE, поскольку реализует разделение приложений, как оно есть "из коробки".

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

Вы получаете "из памяти пермгена или у тебя из памяти регулярно выходит?

Я также добился прогресса, подключив к нему JProfiler и проверив с этим использование памяти.

Я просто перезагружал Jboss все время - нене занимать слишком много времени.

5

В основном нет. Из-за того, как работают загрузчики классов JBoss, каждое развертывание использует часть PermGen, которая не будет выпущена, даже если приложение не развернуто.

Вы можете смягчить симптомы, увеличив размер пула памяти PermGen до нескольких сотен мегабайт (или даже гигов), что облегчает проблему. Я'Мы также обнаружили, что сокращение использования статических полей в вашем коде (особенно статических полей, которые ссылаются на большие объекты) уменьшает влияние на PermGen.

В идеале я бы не использовал горячее развертывание в производственной среде, а просто выключил сервер, заменил WAR / EAR и перезапустил его.

0

Попробуйте это (что относится к Sun 'с Java):

-XX: + UseConcMarkSweepGC -XX: + CMSPermGenSweepingEnabled -XX: + CMSClassUnloadingEnabled -XX: MaxPermSize = 128 м

CMS может на самом деле собирать кучу постоянного поколения (кучу, в которой находятся ваши классы). Установка MaxPermSize не требуется, но по умолчанию для сервера приложений установлено низкое значение.

Похожие вопросы