Как увеличить размер кучи для ws_ant.sh при развертывании в WebSphere 8.5 (64-битный Linux)
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:
Атрибут properties не является обязательным и содержит файл свойств java, содержащий атрибуты, которые нужно установить в свойствах системы JVM.
В моем jvm.properties
файл, я пробовал:
[user@localhost]$ cat jvm.properties
-Xms4096m
-Xmx4096m
Это не имело никакого эффекта. проведение ws_ant.sh
с -v
Флаг verbose показал, что где-то значение -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_____" братья и сестры]).
3 ответа
Попробуй атрибут 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" />
Мы используем Maven для развертывания, и я могу подтвердить, добавив jvmMaxMemory в wsInstallApp, помогло. Мне пришлось раскошелиться на оригинальный плагин и добавить поддержку для него.
Для ws_ant.sh вы должны использовать переменную env JVM_EXTRA_CMD_ARGS.
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.