【问题标题】:Heap size when running a batch file which runs a JVM under Jenkins运行在 Jenkins 下运行 JVM 的批处理文件时的堆大小
【发布时间】:2015-11-06 02:43:09
【问题描述】:

我有一个 Jenkins 构建,构建的一个步骤是调用 bat 文件的 Windows 批处理命令步骤。

批处理文件包含以下创建 JVM 的命令

SET JAVA_OPTS=-Xmx4g -Xms512m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=128m

call sbt %cmd% "run %db% %dbuser% %dbpass% %df% %dfport% %dfuser% %dfpass% %epsg% %starttime%"

如果我像上面那样使用 -Xmx4g,则命令在 Jenkins 中失败,并带有

Invalid maximum heap size: -Xmx4g The specified size exceeds the maximum representable size.

但是,如果我在命令提示符下在从属计算机上在 Jenkins 之外运行相同的批处理文件,则完全没有问题。

如果我在 Jenkins 下使用 -Xmx2g 运行命令,则内存不足,因为该命令的堆大小太小,但至少它在没有无效最大堆大小的情况下运行。

如何防止 Jenkins 在此构建步骤中限制正在运行的 JVM?

我尝试了以下方法,但尚未找到允许此构建步骤完成的解决方案:

  1. 更改 Jenkins 服务器上的堆大小(尽管它不是有问题的服务器端 JVM)
  2. 更改分配给运行构建的从站的堆大小(使用 Jenkins 服务器中节点配置页面上的 JVM 选项)

还有其他建议吗?

【问题讨论】:

  • 我假设当你成功运行批处理文件时,它是在运行 Jenkins 的同一台机器上?
  • 是的,批处理文件在从机上的 Jenkins 外部运行时成功运行。
  • 你能验证在这些情况下运行的是同一个 JVM 吗? (听起来失败的案例是启动 32 位 JVM)

标签: java scala jenkins jvm heap-size


【解决方案1】:

我没有使用 64 位版本的 JAVA - 我将从站上的 JAVA 版本更改为 64 位版本,确保 Jenkins 在代理和启动 JVM 的步骤中都使用此版本,现在我没有我报告的问题。

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多