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
упакованный с БЫЛИ результаты в OutOfMemoryError
и дампы "кучи".
Так, я должен увеличить "кучу", доступную задаче (или сам ws_ant?) во времени выполнения, но я не могу выяснить надлежащее место, чтобы сделать так. Я пытался изменить wsadmin.sh, и в то время как это имеет эффект, если я выполняю свое развертывание как сценарий Jython с wsadmin.sh
непосредственно, это, кажется, не оказывает влияния вообще на выполнение <wsInstallApp>
из скрипта Ant.
Согласно документации IBM wsInstallApp:
Атрибут свойств является дополнительным, и он содержит файл свойств Java, содержащий атрибуты для установки в свойствах JVM System
В моем 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, но я пытаюсь усилить некоторые обширные сценарии Муравья из другого приложения EAR.
Альтернативы? Я также распознаю, что мог использовать <wsadmin>
Задача Ant для вызова некоторых сценариев Jython из Муравья - я еще не попробовал это - но снова, у нас уже есть некоторые обширные сценарии иначе. Каковы относительные преимущества и недостатки одного пути по сравнению с другим? (т.е. выполнение wsadmin.sh
Сценарий/Jython через <[ssh]exec>
или <wsadmin>
по сравнению с <wsInstallApp>
[и его "ws _____" одноуровневые элементы]).
Попробуйте атрибут 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" />
Для 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.
Мы используем Maven для развертывания, и я могу подтвердить, добавление jvmMaxMemory в wsInstallApp помогло. Мне пришлось форкнуть оригинальный плагин и добавить для него поддержку.