Ошибка OutOfMemory при развертывании файла войны в Glassfish 2.1.1 из-за слишком большого объема памяти (настройки -Xms -Xmx)

Мы получаем ошибку (OutOfMemory) при развертывании файла войны в Glassfish 2.1.1. Это связано с параметрами памяти в файле domain.xml.

Мы увеличили параметры -Xmx и -Xms jvm-options до 1024 вместо 512 по умолчанию, например:

<jvm-options>-Xms=1024m</jvm-options> 
<jvm-options>-Xmx=1024m</jvm-options> 
<jvm-options>-XX:MaxPermSize=256m</jvm-options> 
<jvm-options>-server</jvm-options> 
<jvm-options>-D64</jvm-options>

Команда, которую мы используем:

asadmin deploy --user admin --passwordfile <passwd-file> --host localhost --port 4848 <warfile>

Ошибка, которую мы получили в server.log:

[#|2011-03-15T09:40:56.750+0100|СЕРЬЕЗНЫЙ|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=15;_ThreadName=Thread-40;_RequestID=16902980-9800-488e -82b5-0104cd18e57c;|Исключение произошло в J2EEC Phasejava.lang.OutOfMemoryError: com.sun.enterprise.deployment.backend.IASDeploymentException: Ошибка при загрузке дескрипторов развертывания для модуля ...

Когда мы вернем jvm-options к исходному значению (512m), ошибка будет устранена. Любые подсказки, почему это происходит? Есть ли максимальное значение для этих параметров?

Информация о системе
Версия Java: Java HotSpot(TM) Server VM (16.3-b01-jre1.6.0.07-rc1)
ОС: HP-UX Itanium 64bit


person JohanKees    schedule 15.03.2011    source источник
comment
Достаточно ли памяти для выделения кучи java на машине, на которой вы пытаетесь ее запустить? Возможная попытка с Xms128m Xmx1024m У меня была похожая проблема пару лет назад.   -  person topless    schedule 15.03.2011
comment
Да, памяти более чем достаточно (несколько ГБ). Установка Xms на более низкое значение действительно помогает. Одна из проблем (ошибок), с которыми мы столкнулись в Glassfish, заключается в том, что GF использует значение Xms, когда значение Xmx выше, чем значение Xms. Установка Xms на более низкое значение (и при этом установка Xmx на более низкое значение) действительно работает, но это не решение для нас, потому что нам нужно, чтобы память была 1024 м (или как можно больше, если 1024 м невозможно) .   -  person JohanKees    schedule 15.03.2011
comment
версия архитектуры java/ОС; у вас достаточно PermGen? и, в конечном итоге, показать командную строку, с которой запущено приложение, linux ps может это сделать, диспетчер задач winows7 может показать это или проводник процессов для других версий Windows. OOM неясен: куча/perm gen/прямое пространство буферов и т. д. Пожалуйста, отредактируйте вопрос.   -  person bestsss    schedule 15.03.2011


Ответы (1)


Вы используете 64-разрядную установку, но не можете использовать все 64-разрядные функции в целом, что означает недостаточное использование памяти. Я нашел интересный пост об этом: http://www.java.net/node/704100

Может ли помочь этот совет? Отметьте мой ответ, если у вас есть новые идеи по этой ссылке :)

person mico    schedule 18.03.2011