【发布时间】:2015-09-23 23:20:19
【问题描述】:
我正在尝试使用 sbt "run" 命令运行一个占用大量内存的程序,但我似乎遇到了 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 的内存,然后引发内存不足错误。
【问题讨论】:
-
那么,你的问题是什么?
-
如何删除第二个 -Xmx 参数。考虑到 1G 左右的内存不足,它似乎使用了第二个。 “... -Xmx32G -Xms1024m -Xmx1024m ...” 我应该提到我正在通过“sbt run”运行它。
-
我建议您尝试stackoverflow.com/questions/3868863/… 中列出的说明 - 如果您使用的是 SBT 0.13.6 或更高版本,请查看 iwein 的答案(不是公认的答案)
-
可能在
$HOME/.sbtrc或<project>/.sbtrc中定义? -
这些文件似乎都不存在。我还检查了环境变量,似乎没有一个是相关的。