TL; DR - Как мне дать ws_ant.sh
и / или <wsInstallApp>
задача больше кучи во время выполнения?
Я пытаюсь развернуть относительно большой (~ 160 МБ) файл EAR в WebSphere 8.5, работающем на 64-битной платформе Linux.
Вот задача, которая стоит у меня в build.xml
:
<wsInstallApp
ear="/my/ear/file/location/New.EAR"
properties="jvm.properties"
options="-appname myNewEarApp -update -deployws"
host="localhost"
conntype="SOAP"
user="the_username"
password="not_telling_you"
failonerror="true" />
Выполняя это с ws_ant.sh
упакованный с WAS приводит к OutOfMemoryError
и кучи отвалов.
Итак, мне нужно увеличить кучу, доступную для задачи (или самого ws_ant?) Во время выполнения, но я не могу определить подходящее место для этого. Я попытался изменение wsadmin.sh, и хотя это дает эффект, если я запускаю свое развертывание как сценарий Jython с wsadmin.sh
напрямую, похоже, что это не оказывает никакого влияния на выполнение <wsInstallApp>
из сценария Ant.
В соответствии с документация IBM по wsInstallApp:
В свойства атрибут является необязательным и содержит файл свойств java, содержащий атрибуты для установки в свойствах системы JVM
В моем jvm.properties
файл, я пробовал:
[user@localhost]$ cat jvm.properties
-Xms4096m
-Xmx4096m
Это не подействовало. Выполнение ws_ant.sh
с -v
подробный флаг показал, что где-то значение -Xmx установлено как -Xmx256m
. Я попробовал несколько других сложных комбинаций и форматов, но ничего не помогло.
Я также пробовал добавлять аргументы в ws_ant.sh
вызов:
[user@localhost]$ ws_ant.sh -Xms4096m -Xmx4096m -v -f build.xml was.deploy
... но это тоже ничего не дает.
Что я делаю не так? Я признаю, что, если бы я нажал, я мог бы, вероятно, удовлетворить свои требования, переписав развертывание с помощью wsadmin.sh
и сценарий Jython, но я пытаюсь использовать некоторые обширные сценарии Ant из другого приложения EAR.
Альтернативы? Я также признаю, что я мог использовать <wsadmin>
Задача Ant для вызова некоторых сценариев Jython из Ant - я еще не пробовал это - но, опять же, у нас уже есть некоторые обширные сценарии в противном случае. Каковы относительные преимущества и недостатки одного способа по сравнению с другим? (т.е. выполнение wsadmin.sh
/ Jython скрипт через <[ssh]exec>
или <wsadmin>
против <wsInstallApp>
[и его братья и сестры "ws_____"]).
Мы используем Maven для развертывания, и я могу подтвердить, что добавление jvmMaxMemory в wsInstallApp помогло. Мне пришлось форкнуть оригинальный плагин и добавить для него поддержку.
Для ws_ant.sh вы должны использовать JVM_EXTRA_CMD_ARGS переменная env.
export JVM_EXTRA_CMD_ARGS="-Xms1G -Xmx2G"
sh $WEBSPHERE_HOME/bin/ws_ant.sh -f was-build.xml
Чтобы доказать это, поменяйте местами минимальный и максимальный размеры «-Xms2G -Xmx1G», и вы получите сообщение об ошибке:
VMJ9GC019E -Xms too large for -Xmx
JVMJ9VM015W Initialization error for library j9gc26(2): Failed to initialize
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Попробуйте атрибут jvmMaxMemory
<wsInstallApp
ear="/my/ear/file/location/New.EAR"
jvmMaxMemory="1024M"
options="-appname myNewEarApp -update -deployws"
host="localhost"
conntype="SOAP"
user="the_username"
password="not_telling_you"
failonerror="true" />