我们使用SBT 0.13和Java 8 JVM在CircleCI上构建一个带有多个子项目的Play应用程序。我们偶尔会在CircleCI上遇到内存不足的问题,因为它超出了4 GB的内存使用限制,导致构建失败。
昨天,我向我们的构建项目添加了一个新的子项目,现在几乎所有的构建都因为内存不足而失败。看起来添加子项目也增加了构建所使用的内存量。
我尝试了几种方法来减少内存负荷:
- 在`circle.yml`中添加`_JAVA_OPTIONS: "-Xms512m -Xmx2048"`,如CircleCI文档页面所述。(我从日志中注意到JVM确实接受了这个设置。) - 在SBT调用中添加`-mem`参数。 - 在SBT文件顶部添加`concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)`,以确保至少不会一次性使用所有内存。
所有这些措施似乎都有所帮助,但我还没有找到这个问题的最终解决方案。
除此之外,我还能做什么来控制SBT的内存使用?
注:“我们的项目有5个子项目,大约有14000行Scala代码(并且还有21000行Java代码是我们‘继承’来的)。通常(但不总是),内存不足会在使用FindBugs执行静态分析时发生:我们与FindSecurityBugs插件一起使用它来查找安全问题。”
昨天,我向我们的构建项目添加了一个新的子项目,现在几乎所有的构建都因为内存不足而失败。看起来添加子项目也增加了构建所使用的内存量。
我尝试了几种方法来减少内存负荷:
- 在`circle.yml`中添加`_JAVA_OPTIONS: "-Xms512m -Xmx2048"`,如CircleCI文档页面所述。(我从日志中注意到JVM确实接受了这个设置。) - 在SBT调用中添加`-mem`参数。 - 在SBT文件顶部添加`concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)`,以确保至少不会一次性使用所有内存。
所有这些措施似乎都有所帮助,但我还没有找到这个问题的最终解决方案。
除此之外,我还能做什么来控制SBT的内存使用?
注:“我们的项目有5个子项目,大约有14000行Scala代码(并且还有21000行Java代码是我们‘继承’来的)。通常(但不总是),内存不足会在使用FindBugs执行静态分析时发生:我们与FindSecurityBugs插件一起使用它来查找安全问题。”