Назад | Перейти на главную страницу

Как увеличить размер кучи для 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:

В свойства атрибут является необязательным и содержит файл свойств 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" />