在WebSphere 8.5(64位Linux)上部署时如何增加ws_ant.sh的堆大小

TL; DR – 如何在运行时给予ws_ant.sh和/或<wsInstallApp>任务更多的堆?

我试图在64位Linux平台上运行一个相对较大的(〜160 MB)EAR文件到WebSphere 8.5。

这是我在我的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" /> 

用WAS打包的ws_ant.sh执行它会导致OutOfMemoryError和堆转储。

所以,我需要在运行时增加可用的堆(或ws_ant本身?),但我无法弄清楚这样做的适当位置。 我尝试修改wsadmin.sh ,而如果直接使用wsadmin.sh作为Jython脚本运行我的部署,则会产生影响,它似乎对Ant脚本中<wsInstallApp>的执行没有任何影响。

根据wsInstallApp的IBM文档 :

properties属性是可选的,它包含一个包含要在JVM系统属性中设置的属性的java属性文件

在我的jvm.properties文件中,我试过了:

 [user@localhost]$ cat jvm.properties -Xms4096m -Xmx4096m 

这没有效果。 使用-v verbose标志执行ws_ant.sh显示某处的-Xmx值设置为-Xmx256m 。 我尝试了几个其他的头发组合和格式,但似乎没有任何工作。

我也尝试在ws_ant.sh调用中添加参数:

 [user@localhost]$ ws_ant.sh -Xms4096m -Xmx4096m -v -f build.xml was.deploy 

…但这似乎也无能为力

我究竟做错了什么? 我承认,如果按下,我可能可以通过使用wsadmin.sh和Jython脚本重写部署来满足我的要求,但我试图利用来自不同EAR应用程序的一些广泛的Ant脚本。

备择scheme? 我也认识到,我可以使用<wsadmin> Ant任务从Ant内部调用一些Jython脚本 – 我还没有尝试过 – 但是,我们已经有了一些广泛的脚本。 一种方式相对于另一种方式的相对优点和缺点是什么? (即,通过<[ssh]exec><wsadmin><wsInstallApp> [及其“ws_____”兄弟)执行wsadmin.sh / Jython脚本。

尝试属性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 envvariables。

 export JVM_EXTRA_CMD_ARGS="-Xms1G -Xmx2G" sh $WEBSPHERE_HOME/bin/ws_ant.sh -f was-build.xml 

为了certificate这一点,交换最小和最大尺寸“-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.