运行时Scala SBT第二个-Xmx参数

时间:2015-07-06 17:35:30

标签: java scala jvm sbt

我正在尝试使用sbt"运行"运行一个占用大量内存的程序。命令,我似乎遇到了jvm似乎从某个覆盖我的地方获取第二个-Xmx参数的问题。

我正在通过" sbt run"。

运行程序

查看流程我可以找到以下内容:

/usr/bin/java -XX:MaxPermSize=256M -Xmx32G -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -jar /usr/local/Cellar/sbt/0.13.6/libexec/sbt-launch.jar run

我的sbt文件如下:

lazy val commonSettings = Seq(
    organization := "edu.university",
    version := "0.1.0",
    scalaVersion := "2.10.2",
    name := "Example",
    javaOptions += "-Xmx32G"
)

如果您想测试它,这是我创建的一段代码,只是填充内存。

package edu.university

import java.lang.Thread
import scala.collection.mutable.ArrayBuffer

object Main {
    val arraySize = 10000
    val nmws = 160000000 // no OOM
    // val nmws = 180000000 // OOM
    val r = scala.util.Random
    def main(args: Array[String]): Unit = {
        println("hi")
        val ab = new ArrayBuffer[Memwaster](nmws)
        ab.transform { a => new Memwaster(r.nextInt) }
        println("done")
        Thread.sleep(20000)
    }
}
class Memwaster(foo: Int)

使用较大的nmws值运行将使用略高于1G的内存,然后抛出内存不足错误。

1 个答案:

答案 0 :(得分:0)

原来一个解决方案是在sbtopts中设置-mem选项。我在/ usr / local / etc / sbtopts(在OSx Yosemete下)找到了我的sbtopts。对于32G,我将它设置为" -mem 32000"。如果这是一个糟糕的解决方案,请发布另一个答案,我很高兴听到这里的意见。

Sorta通过以下文档解决了这个问题: https://opensource.ncsa.illinois.edu/confluence/display/DFDL/Configure+SBT

这看起来像我的build.sbt中的javaOptions值不会覆盖这个错误吗?或者这是出于某种原因所期望的行为?