8

我的 Scala 项目(Maven 管理)未能在 Travis 上构建,GC overhead limit exceeded尽管在本地使用相同的MAVEN_OPTS=-Xmx3g -XX:MaxPermSize=512m. 我怀疑 Travis 以某种方式忽略了我的MAVEN_OPTS:当我尝试针对 Oracle JDK 8 进行测试时,Travis 记录:

$ Setting environment variables from .travis.yml
$ export MAVEN_OPTS="-XX:MaxPermSize=512m -Xmx3g"

看起来不错。但是,在它记录后不久:

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=192m; support was removed in 8.0

这是令人不安的,因为我没有指定-XX:MaxPermSize=192m,只有512m。(这让我相信 my-Xmx3g也被忽略了,导致编译失败。)

我尝试MAVEN_OPTS在我的 pom 中的许多其他地方指定,但无济于事。例如,对于 maven-scala-plugin,我有:

<configuration>
  ...
  <jvmArgs>
    <jvmArg>-Xmx3g</jvmArg>
    <jvmArg>-XX:MaxPermSize=512m</jvmArg>
  </jvmArgs>
</configuration>

而且我在 maven-surefire-plugin 和 scalatest 插件下也有以下内容,尽管在编译而不是测试期间构建失败:

<configuration>
  <argLine>-Xmx3g -XX:MaxPermSize=512m</argLine>
</configuration>

以下是我的 .travis.yml 的全部内容:

language: java
env:
  global:
    - MAVEN_OPTS="-XX:MaxPermSize=512m -Xmx3g"
script: mvn clean install
jdk:
    - oraclejdk8
    - oraclejdk7

我正在使用 Scala 2.11.2 和 scala-maven-plugin 3.2.0。

4

4 回答 4

9

更新(15 年 11 月 2 日):

终于在这里彻底解决。报价:

如果你想使用基于容器的构建(不依赖于 sudo),你可以将你想要的内容回显到一个$HOME/.mavenrc文件中,这将优先于/etc/mavenrc,如下所示:

.travis.yml

before_script:
  - echo "MAVEN_OPTS='-Xmx2g -XX:MaxPermSize=512m'" > ~/.mavenrc

(您也可以before_install根据您的设置将其放入)。

老答案:

我终于在这里找到了答案,它在 Travis CI github 上引用了这个(已关闭但未解决)问题。

似乎 TravisMAVEN_OPTS通过文件将环境变量导出为 root /etc/mavenrc,然后不会被任何其他MAVEN_OPTS定义覆盖(例如,通过 travis 配置中的 env/global 设置)。/etc/mavenrc解决方法是在设置 custom 之前删除MAVEN_OPTS

我能够MAVEN_OPTS使用以下内容设置自定义并成功构建.travis.yml

script:
  - sudo rm /etc/mavenrc
  - export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m"
  - mvn clean install

请注意,我没有language: java在我的 travis 配置中使用,只是通过script指令直接调用 maven。

于 2015-04-01T17:53:37.183 回答
3

export MAVEN_SKIP_RC=true在处理具有 /etc/mavenrc 的系统时,推荐这样做的方法。这将使它忽略默认值并读取MAVEN_OPTS变量。

于 2016-03-02T18:54:55.523 回答
1

虽然可以-Xmx3g在 Travis CI 构建中进行设置,但其服务器的内存有限,无法在分叉的万无一失的测试中为 JVM 堆释放内存。

这是-Xmx2560m在 Travis CI 上用于最大速度的项目: https ://github.com/plokhotnyuk/actors/blob/8f22977981e0c4d21b67beee994b339eb787ee9a/pom.xml#L151

- sudo cat /proc/meminfo您可以通过添加到的行来检查可用内存.travis.yml。这是一些 Travis CI 构建的输出:https ://travis-ci.org/plokhotnyuk/actors/jobs/55013090#L923

如果您的项目需要更大的堆大小,请尝试https://www.shippable.com

或者最好使用 Wercker(构建速度更快,根本无需排队等待)http://wercker.com

于 2015-03-23T05:20:11.783 回答
0

这最终对我有用。

language: java
sudo: false
jdk:
  - oraclejdk8
install: MAVEN_SKIP_RC=true MAVEN_OPTS="-Xss4M" mvn install -DskipTests=true
script: MAVEN_SKIP_RC=true MAVEN_OPTS="-Xss4M" mvn

正如@adam 所说,需要 MAVEN_SKIP_RC 并且 MAVEN_OPTS 是我需要让 javac 停止爆出堆栈。

于 2016-10-01T05:24:31.333 回答