Как увеличить размер кучи для 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.
Другие вопросы по тегам